我试图弄清楚如何一起测试两个字符串,以查看数组“ 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 *
类型的指针。这只是两个错误,但是对于如此少量的代码,它们是很多错误。