我正在尝试编写加密算法。我更改了字母顺序。
char alfabe[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
更改后,我想将 last 分配给字母 z 和 y,但我无法使用这些代码。
strcpy(alfabe[25],"z");
strcpy(alfabe[26],"y");
我正在尝试编写加密算法。我更改了字母顺序。
char alfabe[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
更改后,我想将 last 分配给字母 z 和 y,但我无法使用这些代码。
strcpy(alfabe[25],"z");
strcpy(alfabe[26],"y");
这至少适用于小写字母:
char *p;
for(p = mystr; *p; p++)
if(*p >= 'a' && *p <= 'z')
*p = alfabe[*p-'a'];
但请记住,转置不是加密!
alfabe[24] = 'z';
alfabe[25] = 'y';
strcpy 在这里使用绝对是错误的。
也许最清楚的是写:
alfabe['y' - 'a'] = 'z';
alfabe['z' - 'a'] = 'y';
这使得您在表中交换 y 和 z 非常明显。
您可以更轻松地进行简单的转置(Caesar cypher)机制,而无需手动定义字母表。
char* text;
int i, num_transpose;
for(i=0; a[i] != '\0'; i++)
if (a[i] >= 'a' && a[i] <= 'z')
text[i] = (text[i] - 'a' + num_transpose) % ('z'-'a'+1) + 'a';
这会将文本中的num_transpose
字母按字母表中的位置移动。请注意,这仅适用于小写 ASCII 字母。