c - 使用递归查找最长的单词 C

标签 c string recursion

我正在尝试查找结构数组中最长单词的大小。 我有这个结构数组:

struct Vocabolo{
    char parola[20];
    char *sinonimi[5];
    char definizione[300];
    };
typedef Vocabolo vocabolo;
vocabolo parole[30];

现在我必须使用增量递归来查找数组中最对数单词的大小。每个单词包含在:

parole[n].parola

我正在使用此代码:

int Lunghezza_parola(vocabolo *parole,int n){
    int y;
    if(n == 1)
        return strlen(parole[0].parola);
    else {
        y = strlen(parole[n-1].parola);
        return Scegli_max(y,Lunghezza_parola(&parole,n-1));

    }
}

我们的Scegli_max是:

int Scegli_max(int y, int lunghezzaStringa){
    if (y >= lunghezzaStringa)
        return y;
    else
        return lunghezzaStringa;
}

在此程序中,用户必须手动插入单词,并且每次插入单词时,程序都应按字母顺序排列它们。

如果我尝试输入“come”作为 parole[0].parola 和“hi”parole[1].parola 并启动此函数,结果是 3。此外,它似乎仅在最长的单词位于数组的最后位置时才有效。

有什么想法吗?

PS:这是一个较长程序的一部分,因此不可能在这里编写所有代码,但我很确定除了这个函数之外,一切都工作正常,因此单词在结构数组中的顺序正确。

最佳答案

您的问题是return Scegli_max(y,Lunghezza_parola(&parole,n-1));

您调用 Lunghezza_parola 并给它 &parole,它已经是一个 vocabolo *parole,因此它变成了一个 vocabolo **parole 并且指针现在无效。

尝试将返回更改为 return Scegli_max(y,Lunghezza_parola(parole,n-1));

关于c - 使用递归查找最长的单词 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176119/

相关文章:

java - 递归函数缺少返回语句

c++ - getline(cin, var) 不工作!

c - 如何关闭我没有明确打开的 C 中的内存映射文件?

C 编程 while 循环和数组结构

c - 为什么 C 中的 printf() 方法设计为接受任意数量的参数?

python - 如何在 Python3 中像 printf 一样打印?

string - 如何在 Haskell 中填充整数的字符串表示形式?

java - 深度优先搜索的递归算法

javascript - 带参数的递归javascript函数?

c - 如何刷新输入缓冲区? (C)