繁体   English   中英

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

[英]Strings (C) - Comparing letters of two strings

尝试编写该函数会检查words所有字母是否以相同的顺序出现在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM