比较不带ASCII的C中的两个字符

时间:2019-02-05 22:41:20

标签: c arrays ascii

所以我想基本上进行加密。我这样做的方法是创建两个数组并切换值。我遇到的问题是,当数组只是字符数组时,它不起作用。但是,当我转换为ASCII数字时,它确实可以。这是两个数组的示例:

sub-menu-title

然后,我为纯文本和加密文本创建了值,并为for循环创建了值。例如。

char* plainarray[26] = ["a","b","c"] //this would go on for the entire alphabet
char* cryptarray[26] = ["p","j","n"] //this array is the entire alphabet randomized

然后我使用两个for循环将被加密的值添加到“ crypt”中

char plain[5] = "hello";
char* change[5] = {};
int i;
int j;
length = strlen(text); //length of string for for loop

编译时收到的警告代码是:

for(i=0; i<length; i++){
    for (j = 0; j <26; j++){
        if (plain[i] == plainarray1[j]){
            change[i] = cryptarray2[j];
        }
    }
}

我的问题的一种解决方案是在纯文本数组中使用ASCII数字并将其设置为int数组。这将比较两个字符,但是对于该问题,字母顺序将是随机的,因此我无法做到这一点。有一个更好的方法吗?我对修改后的文本(“更改”)的数组和赋值是否正确?它不能给他正确的输出。

3 个答案:

答案 0 :(得分:2)

您要存储指向字符串的指针数组。取消引用指针数组将为您提供一个指针。要存储字符数组,请输入:

const char plainarray[26] = {'a', 'b', 'c', \* ... */ };

const char plainarray[] = "abc...";

后者并不完全相同,因为它在末尾有一个额外的字节来终止字符串。

答案 1 :(得分:1)

此类型:

char* plainarray[26] = ...

是一个指向字符的指针数组,不是是一个字符数组。更改为此:

char* plainarray = "abc...";

然后,您可以像这样访问数组:

printf("%c", plainarray[0]); // prints 'a'

答案 2 :(得分:0)

您正在将指向==的字符串的指针进行比较,这是不正确的,因为它们显然都位于不同的地址。

如果您确实打算将plainarraycryptarray存储为以空值结尾的字符串的指针数组,每个指针都包含一个字母,则可以使用strcmp函数进行比较它们(或者,由于指向的每个字符串都是一个字符长加上空终止符,因此您可以比较两个字符串的位置[0])。

但是,在我看来,将plainarraycryptarray存储为纯char的数组更有意义。