我想检查单词 A 中的每个字符是否也在单词 B 中。 这个功能还不能用,但我希望你能帮助我。 我创建了一个检查变量,仅当单词 A 中位置 i 的字符等于单词 B 中的字符 i 时该变量才会增加。
int is_equal(char *a, char *b)
{
int i = 0, j;
int check = 0;
while (a[i] != '\0')
{
for (j = 0; b[j] != '\0'; j++)
{
if (a[i] == b[j]) //Here
{
i = i + 1;
j = 0;
check = check + 1; //Increase
}
else
{
i = i + 1;
j = 0;
}
}
}
if (check % strlen(a) == 0)
{
return 1;
}
return 0;
}
在这个函数的最后,我将检查字符串 a 的检查%长度是否为 0。 如果是这样的话,A 中的每个字符也在 B 中。 但它不起作用,因为如果 a[i] 和 b[j] 不相等,j 将被重置为 0 并且崩溃。那么,我该如何解决这个问题呢?如何重置循环以从头开始检查?
最佳答案
代码的问题在于,您要决定 a[]
中的字符是否与嵌套循环内的 b[]
形式匹配。对于这个决定来说还为时过早,因为您的代码没有机会检查 b[]
中的其他字符。
您可以修改代码以引入 found
标志,在进入嵌套循环之前将其设置为零,然后在找到匹配项时将其设置为 1:
int found = 0;
for (j = 0 ; !found && b[j] != '\0' ; j++) {
found = a[i] == b[j];
}
循环后found
的值指示b[]
中的任何字符是否与a[i]
匹配。
注意:这对于短的 a[]
和 b[]
效果很好,但对于很长的字符串可能就太差了。慢的。更好的方法是遍历 b[]
一次,标记其中的所有字符,然后遍历 a[]
检查是否缺少任何字符:
int seen[256] = {0};
for (int i = 0 ; b[i] ; i++) {
// Mark characters from b[]
seen[(unsigned char)b[i]] = 1;
}
for (int i = 0 ; a[i] ; i++) {
// Found a char in a[] that's not in b[]
if (!seen[(unsigned char)a[i]]) {
return 0;
}
}
return 1;
关于c - 如何检查单词a中单词b中的所有字符(C语言)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50198101/