编程以查找字符串中最长的单词

0 c string loops

我写了一个程序来查找字符串中最长的单词并打印最长单词中的字母数.但代码不是打印.我多次分析了该程序,但我找不到解决方案.

#include <stdio.h>
#include <string.h>

int main() {
    char string[100] = "Hello Kurnool";
    int i = 0, letters = 0, longest = 0;

start:

    for (; string[i] !=' '; i++) {
        letters++;  
    }

    if (letters >= longest)
        longest = letters;

    if (string[i] == ' ') {
        letters = 0;
        i++;
        goto start;
    }

    printf("%d", longest);

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

chq*_*lie 8

使用goto非常气馁.您应该将代码转换为使用循环.

代码中的主要问题是当您到达字符串末尾时不要停止扫描.

这是一个修改版本:

#include <stdio.h>

int main() {
    char string[100] = "Hello Kurnool";
    int i, letters, longest = 0, longest_pos = 0;

    for (i = 0; string[i] != '\0'; i++) {
        for (letters = 0; string[i] != '\0' && string[i] != ' '; i++) {
            letters++;  
        }
        if (letters > longest) {
            longest = letters;
            longest_pos = i - longest;
        }
    }    
    printf("longest word: %d letters, '%.*s'\n",
           longest, longest, string + longest_pos);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,实现可以简化为单个循环:

#include <stdio.h>

int main() {
    char string[100] = "Hello Kurnool";
    int i, start = 0, longest = 0, longest_pos = 0;

    for (i = 0; string[i] != '\0'; i++) {
        if (string[i] == ' ') {
            start = i + 1;
        } else {
            if (i - start > longest) {
                longest = i - start;
                longest_pos = start;
            }
        }
    }    
    printf("longest word: %d letters, '%.*s'\n",
           longest, longest, string + longest_pos);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)