我试图弄清楚如何一起测试两个字符串,以查看数组“ str1”中是否包含名为“ target”的数组中的字母。如果可以在str1中找到target中的所有字母,则testWord返回true,否则返回false。这是我到目前为止的代码,找到一个字母后就会停止。如何继续遍历str1的其余部分?

    #include <stdio.h>
int testWord(char str1[], char target[]);

int main() {
    char str1 [8] = {'q','i','j','i','b','o'};
    char target [3] = {'j','i','b'};
    int a= testWord(str1, target);
    printf("%d", a);
    return 0;
}

int testWord(char str1[], char target[]) {
    for(int i = 0; i < sizeof(*str1) ; i++) {
        for (int j = 0; j < sizeof(*target); j++) {
            if (strstr(str1, target)) {
                printf("%s%c%s\n","Target letter ", target[i], " was found");
                //delete letter from set
                str1[i - 1] = str1[i];
                i++;
            }
        }
    }
    return 0;
}

最佳答案

您的代码中有很多错误,


您正确初始化了数组,但它们不是c字符串。要使它们成为有效的c字符串,您需要nul终止它们,

char str1[8]   = {'q', 'i', 'j', 'i', 'b', 'o', '\0'};
/*                                                ^ nul */
char target[3] = {'j', 'i', 'b', '\0'};
/*                                 ^ nul */

您使用sizeof运算符错误

sizeof(*str1)


将始终为您提供1,因为str1的类型为char *,因此*str1的类型为char,而sizeof(char)的定义为1

阅读sizeof运算符,它不返回字符串的长度,它在编译时评估参数,并且给出类型的大小或在数组的情况下给出数组的大小。您的数组不是数组,即使您在参数定义中指定了大小,它也会被转换为char *类型的指针。


这只是两个错误,但是对于如此少量的代码,它们是很多错误。

10-08 09:10
查看更多