用递归找到最长的单词C.

时间:2012-02-07 12:18:20

标签: c string recursion

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

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

现在我必须使用增量递归才能找到数组中lognest字的大小。单词包含在:

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));

    }
}

Wnere Scegli_max是:

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

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

如果我尝试输入类似“来”作为parole[0].parola和“hi”parole[1].parola的内容并启动此功能,则结果为3.此外,它似乎只有在最长的单词位于数组的最后位置。

有什么想法吗?

PS:这是一个较长的程序的一部分,所以不可能在这里写所有的代码,但我很确定正常的工作很好地解释了这个函数所以单词在struct数组中正确排序。

2 个答案:

答案 0 :(得分:1)

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

你打电话给Lunghezza_parola给它&假释已经是vocabolo *parole所以这变成了vocabolo **parole并且指针现在无效。

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

答案 1 :(得分:0)

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

你应该传递指针的值,而不是指向它的指针。