C中有多少个字符的单词最长

C中有多少个字符的单词最长,c,linked-list,C,Linked List,我有一个函数,它应该计算有多少个字符有最长的字,但它计算错了 例如,当第一个单词比第二个短时,如果我输入两个单词:“我的名字”程序会显示最长的单词有两个字符。但当我输入“name my”时,结果显示为4。为什么呢 void max_chars(ListNodePtr sPtr) { int i = 0; int max = 0; while (sPtr->next != NULL) { if (isalpha(sPtr->data)) {

我有一个函数,它应该计算有多少个字符有最长的字,但它计算错了

例如,当第一个单词比第二个短时,如果我输入两个单词:“我的名字”程序会显示最长的单词有两个字符。但当我输入“name my”时,结果显示为4。为什么呢

void max_chars(ListNodePtr sPtr)
{
    int i = 0;
    int max = 0;

    while (sPtr->next != NULL) {
        if (isalpha(sPtr->data)) {
            i++;
        } else {
            if (i > max) {
                max = i;
            }
            i = 0;
        }
        sPtr = sPtr->next;
    }

    printf(" \n The Longest word have : %d chars \n", max);
}

my name
中,当您到达节点
e
时,您
中断
循环,因为
下一个
null
,因此
max
不会更新。

您还应该更新循环外部的
max
或更改循环的条件

Is
sPtr=sPtr->next
递增什么?我提到它是因为每个循环调用它两次。一个在while语句中,一个在循环体中。如果它正在递增某个指针,那么您将使用两个字符乘以两个字符。请尝试打印当前计算的字符以查看发生了什么。请使用“\0”(标准)而不是空字符,然后查看以下内容
void max_chars(ListNodePtr sPtr)
{
    int i = 0;
    int imax = 0;

    for( ;sPtr; sPtr = sPtr->next;) {
        if (isalpha(sPtr->data)) { if(++i > imax) imax=i; }
        else { i = 0;  }
    }

    printf(" \n The Longest word have : %d chars \n", imax);
}