在一个字符串中查找最长的单词

题目描述

编写程序,在一个字符串中查找最长的单词,假定字符串只含有字母与空格,且空格用于分隔不同的单词。 思考:你能输出字符串中最长的单词么?

案例代码

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

int main()
{
    char str[100];
    char longest_word[100];
    int i, j;
    int len, max_len = 0;
    
    printf("Enter a string: ");
    gets(str);
    
    len = strlen(str);

    for (i = 0; i < len; i++) {
        // 查找单词的起始位置
        if (str[i] != ' ') {
            j = i;
            while (str[j] != ' ' && j < len) {
                j++;
            }
            // 比较当前单词长度和之前的最大长度
            if (j - i > max_len) {
                max_len = j - i;
                strncpy(longest_word, &str[i], max_len);
                longest_word[max_len] = '\0';
            }
            i = j;
        }
    }

    printf("Longest word: %s\n", longest_word);
    printf("Length: %d\n", max_len);
    
    return 0;
}

这个程序首先提示用户输入一个字符串,并使用 gets() 函数读取输入的字符串。接着,程序遍历整个字符串,逐个查找单词的起始位置和结束位置,计算每个单词的长度,并比较长度大小,最终找到最长的单词并输出。需要注意的是,在 C 语言中字符串是以 null 字符(’\0’)结尾的字符数组,因此我们在复制最长单词的时候需要手动添加 null 字符以结束字符串。

需要注意的是,因为使用 gets() 函数可能会导致缓冲区溢出的安全问题,因此在实际的程序中,建议使用 fgets() 函数来读取输入的字符串,并指定最大读取长度。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享