[英]Strings (C) - Comparing letters of two strings
尝试编写该函数会检查word
中s
所有字母是否以相同的顺序出现在s
中。 如果一个字母在word
多次出现,那么它应该至少出现在s
。
例如:
containsLetters2("abcdef", "aaabbb")
返回0,因为字母“a”没有三次出现,后面出现三次字母“b”。
这个:
containsLetters2("axaxxabxxbxbcdef","aaabbb")
返回1
我无法理解我的代码中有什么问题:
int containsLetters2(char *s, char *word)
{
int j,i, flag;
long len_word, len_s;
len_s=strlen(s);
len_word=strlen(word);
for (i=0; i<=len_word; i++) {
flag=0;
for (j=0; j<=len_s; j++) {
if (*word==*s) {
flag=1;
word++;
break;
}
s++;
}
if (flag==0) {
break;
}
}
return flag;
}
int main() {
char string3[MAX_STRING] , string4[MAX_STRING];
printf("Enter 2 strings for containsLetters2\n");
scanf ("%s %s", string3, string4);
printf("Return value from containsLetters2 is: %d\n",containsLetters2(string3,string4));
return 0; }
for (i=0; i<=len_word; i++) {
flag=0;
for (j=0; j<=len_s; j++) {
if (*word==*s) {
你有两个明显的问题。 一个是一个错误。 如果长度为10,那么你的代码处理从0到10的元素,这是11个元素,而不是10个。其次,你继续比较*word
到*s
。 你想要的是word[i]
与s[j]
。
还有很多问题不那么明显。 我强烈建议您退后一步,先记录您的代码应该遵循的算法。 这样可以更容易地调试代码,因为您将准确地知道它应该做什么。
以下代码可能无法编译,但会执行您希望它执行的操作,希望它有所帮助:
int containsLetters2(char *s, char *word) {
int lastIndex = 0;
for (int i = 0; i < strlen(word); i++) {
for (; lastIndex < strlen(s) && s[lastIndex] != word[i]; lastIndex++);
if (lastIndex == strlen(s)) {
return 0;
}
}
return 1;
}
你应该保留变量j
的值,例如,
word = "aaabbb"
s = "axaxxabxxbxbcdef"
第一次迭代, word[1] == s[1]
,然后它中断并进入第二次迭代,此时, j
被重置为零,并且word[2] == s[1]
。
这是错误的。 更改您的代码如下,看看它是否有帮助,
i=j=0;
for (; i<len_word; i++) {
flag=0;
for (; j<len_s; j++) {
if (*word==*s) {
flag=1;
word++;
break;
}
s++;
}
if (flag==0) {
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.