我试图弄清楚如何测试两个字符串,看看名为“target”的数组中的字母是否包含在数组“str1”中。如果目标中的所有字母都可以在str1中找到,则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;
}
答案 0 :(得分:1)
您的代码中存在许多错误,
正确初始化数组,但它们不是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 *
类型的指针。
这些只是两个错误,但是对于这么少量的代码来说,它们是很多错误。