gpt4 book ai didi

c - 如何检查单词a中单词b中的所有字符(C语言)?

转载 作者:行者123 更新时间:2023-11-30 16:32:20 25 4
gpt4 key购买 nike

我想检查单词 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com