计算最长单词中的字母数

时间:2014-06-18 01:17:12

标签: c

我想得到最长单词的字母数。如果我输入像#34; hello me"我得到5但是如果我写的更长的东西像"传说联盟"我得到6而不是7.为什么?

#include <stdio.h>
int longest_word(const char string[]){
    int i;
    int max;
    int cont;
    i=0;
    while(string[i]!='\0'){
        for(cont=0;string[i]!=' '&& string[i]!='\0';i++)
            cont++;
        if (cont>max)
            max=cont;
        ++i;
    }
    return max;
}
int main(void){
    char f[100];    #maybe this is the problem?
    int i;
    printf("input a string: ");
    scanf("%s",f);
    i=longest_word(f);
    printf("%d",i);
    return 0;
}

4 个答案:

答案 0 :(得分:5)

最简单的调试方法之一是打印您获得的数据,以确保程序符合您的想法。

使用scanf()时,%s格式会读取单个“字”,停在第一个空格处。如果您在致电f后立即打印scanf()

printf("Input: <<%s>>\n", f);

你会发现它只包含'联盟'所以它正确地给出了6。严格来说,在使用它之前,你应该检查scanf()是否确实得到了一些输入:

if (scanf("%99s", f) != 1)
    …EOF or error…

您需要使用fgets()来阅读整行,或者反复调用scanf()longest_word()以获取“传说”和答案7.请注意代码将计算换行符(例如,作为单词的一部分保存在行的末尾fgets())。您可能需要检查<ctype.h>标头并使用isspace()宏来测试空白区域。

此外,正如pablo1977answer首先指出的那样,您需要在max中初始化longest_word()

答案 1 :(得分:2)

#include <stdio.h>

int longest_word(const char string[]){
    int i;
    int max=0;//need initialize
    int cont;
    i=0;
    while(string[i]!='\0'){
        for(cont=0;string[i]!=' '&& string[i]!='\0';i++)
            cont++;
        if (cont>max)
            max=cont;
        if(string[i]==' ')//Do not increment when string[i]=='\0',,
           ++i;
    }
    return max;
}
int main(void){
    char f[100];
    int i;
    printf("input a string: ");
    //scanf("%s",f);// a string delimited by white spaces
    scanf("%99[^\n]",f);
    i=longest_word(f);
    printf("%d\n",i);
    return 0;
}

答案 2 :(得分:0)

需要初始化变量max。

我认为这是问题所在。

答案 3 :(得分:0)

在循环中使用getc()而不是scanf(),因为scanf在&#39;之后不会考虑输入。 &#39;&#39; \ n&#39; ...,

在scanf()语句之后添加printf()。,U将会知道。