C - 程序无法正常工作,我错过了什么?

标签 c

<分区>

我正在学习 C,我必须编写一个程序,您可以在其中输入一个字符串并调用该函数,该函数会告诉您 2 个字母在字符串中重复次数最多。但是该函数返回了错误的字母。问题是,我使用了我以前制作的程序中的一个片段,所以我不知道为什么它现在不起作用。

这是困扰我的功能,我认为问题出在第二个for循环中,因为如果我打印字母表中每个字母的重复次数,它应该是正确的,重复次数与字符串相比,每个字母都是正确的。但是第二个 for 循环仍然没有返回正确的字母。

void najcescaSlova( char *niz, int *znak) {
    int i, slova[26]={0}, duljina=0, znak1, znak2;

    while (niz[duljina] != '\0')
        ++duljina;

    for (i=0; i < duljina; ++i) {
        if (niz[i] >= 'A' && niz[i] <= 'Z')
            ++slova[niz[i] - 65];

        if (niz[i] >= 'a' && niz[i] <= 'z')
            ++slova[niz[i] - 97];
    }

    znak1 = znak2 = -1;

    for (i=0; i < 26; ++i) {
        if (slova[i] != 0) {
            if (slova[i] == znak1) {
                 znak2 = i;
            }

            if (slova[i] > znak1) {
                znak2 = znak1;
                znak1 = i;
            }

            if (slova[i] < znak1 && slova[i] > znak2) {
                znak2 = i;
            }
        }
    }

    znak[0] = znak1;
    znak[1] = znak2;

    return;
}

对不起,该程序是我的母语,但如果您愿意,我可以关闭并重新打开问题。

slova[26]是保存每个字母重复次数的数组。

niz 是输入字符串。

znak1 和 znak2 是最大的两个字母,而 znak1 被视为最大的。

这里的意思是,slova[0]是7,slova[2]是5,所以当i=0时,znak1被置为0,因为0代表A,但是当i=2时,znak1被置为2 , 表示C,即使不满足if(slova[i] > znak1) 条件,slova[i] 为5,小于znak1,znak1 早前设置为7。

抱歉,如果这太长了,感谢您的宝贵时间。

最佳答案

你的问题是不清楚znak1znak2是什么意思?它们是索引还是最大字母的值?

如果它们是索引,那么像 slova[i] == znak1 这样的比较是错误的。它应该是 slova[i] == slova[znak1]

但是如果它们是值,那么像 znak1 = i 这样的赋值是错误的。它应该是 znak1 = slova[i]

关于C - 程序无法正常工作,我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619611/

相关文章:

c - 我正在尝试对字符 z (ASCII 122) 执行凯撒移位。如何给它 "more room"以防止它溢出超过 127?

c - 使用哪个更安全? "==TRUE"或 "!= FALSE"

c - 将字符串分成更小的部分并组织结构(C 编程)

c - read在socket编程中的用法

c - 将 pthread 变量保留在本地

C重新初始化数组

c - 局部变量在栈上的地址

c - 填充该结构的最佳方法是什么?

c++ - 如何在cocos2d(cocos2d-x)中制作流水效果

c - 读取标准输入时 scanf 的行为