我正在嘗試為一個數字串列實作這個簡單的加密方法,加密是這樣的:我們在整個數字串列的每個元素之前添加串列的第一個元素,如果我們有:
char array = "356307042441013"
第一個數字是 3,這意味著我們需要在數字串列的每個元素之前添加它:
'33 35 36 33 30 37 30 34 32 34 34 31 30 31 33'
char result= "333536333037303432343431303133"
C中是否有任何函式可以使實作更容易?因為我嘗試通過換檔來做到這一點,但無法得到那個結果。
uj5u.com熱心網友回復:
您可以執行以下操作:
第 I 步:分配兩倍輸入大小的記憶體 1并將空字符容納到結果字串。
第二步:遍歷輸入字串,在每次迭代中,首先將input[0]字符復制到結果字串的當前位置,然后在結果字串的下一個位置,復制字串的當前處理字符input。
第三步:一旦回圈退出,在結果字串的末尾添加空字符。
[請特別注意空字串,因為它沒有要加密的內容]
執行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * encryption (const char * input) {
if ((!input) || (*input == '\0')) {
return NULL;
}
size_t len = strlen (input);
char * temp = malloc ((len * 2) 1);
if (!temp) {
printf ("Failed to allocate memory\n");
exit (EXIT_FAILURE);
}
size_t i = 0, j = 0;
for (; input[j]; j) {
temp[i ] = input[0];
temp[i ] = input[j];
}
temp[i] = '\0';
return temp;
}
int main (void) {
char array[] = "356307042441013";
char * result = encryption (array);
if (result) {
printf ("result : %s\n", result);
// Free the dynamically allocated memory once done with it
free (result);
}
return 0;
}
輸出:
# ./a.out
result : 333536333037303432343431303133
uj5u.com熱心網友回復:
更清潔、更簡潔的解決方案:
#include <stdio.h>
#include <string.h>
int main()
{
char foo[] = "356307042441013";
char bar[2 * sizeof(foo) - 1];
char *src = foo, *dest = bar;
while (*src) {
*dest = foo[0];
*dest = *src ;
}
*dest = *src;
printf("foo=%s\n",foo);
printf("bar=%s\n",bar);
return 0;
}
最好使用foo[]而不是硬編碼長度,因為如果您想更改字串怎么辦。如果您使用[](空括號),編譯器將準確分配您需要的位元組數(包括終止的 null)。同樣,bar我們通過將大小foo加倍并減去 1 來確定大小(因為終止空值不需要加倍)。
uj5u.com熱心網友回復:
我找到了解決這個問題的方法:
int main() {
char foo[16] = "356307042441013";
char bar[2*16-1];
for (int i = 0; i < 16; i ) {
bar[2*i] = foo[i];
if (i != 16 - 1)
bar[2*i 1] = foo[0];
}
char res[32]= "3";
strcat(res,bar);
res[30] = '\0';
printf("bar=%s\r\n",bar);
printf("begin=%s\r\n",res);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/421914.html
標籤:
