尝试编写该函数会检查word
中的所有字母是否以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; }
答案 0 :(得分:2)
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]
相比。
还有很多问题不那么明显。我强烈建议您退后一步,先记录您的代码应该遵循的算法。这样可以更容易地调试代码,因为您将准确地知道它应该做什么。
答案 1 :(得分:0)
以下代码可能无法编译,但会执行您希望它执行的操作,希望它有所帮助:
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;
}
答案 2 :(得分:0)
您应该保留变量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;
}
}