字符串(C) - 比较两个字符串的字母

时间:2014-01-09 06:15:59

标签: c string

尝试编写该函数会检查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; }

3 个答案:

答案 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;
    }
}
相关问题