字符至真实现找出最长英文字母

输入一段英文,从中找出最长的英文单词。英文单词由空格分隔。(用字符指针实现,且不能调用库函数。)注:英文单词只包含大写字母和小写字母;若最长的英文单词有多个,则输出第一个。

#include <stdio.h>

char* findLongestWord(char* sentence) {
    char* longestWord = NULL;
    int maxWordLength = 0;
    int wordLength = 0;
    
    while (*sentence != '\0') {
        if (*sentence != ' ') {
            wordLength++;
            
            if (wordLength > maxWordLength) {
                maxWordLength = wordLength;
                longestWord = sentence - wordLength + 1;
            }
        } else {
            wordLength = 0;
        }
        
        sentence++;
    }
    
    return longestWord;
}

int main() {
    char input[100];
    
    printf("请输入一段英文:\n");
    fgets(input, 100, stdin);
    
    // 移除输入中的换行符
    for (int i = 0; input[i] != '\0'; i++) {
        if (input[i] == '\n') {
            input[i] = '\0';
            break;
        }
    }
    
    char* longestWord = findLongestWord(input);
    
    if (longestWord != NULL) {
        printf("最长的英文单词是:%s", longestWord);
    } else {
        printf("输入无效或无英文单词。\n");
    }
    
    return 0;
}

供参考:

#include <stdio.h>
int main()
{
    char str[80], * pstr;
    int  i = 0, flg = 0, maxlen = 0, strlen = 0;
    printf("Please input a string:\n");
    gets(str);
    while (str[i] != '\0') {
        if (str[i] != ' ') {
            if (!flg)
                strlen = 0;
            flg = 1;
            strlen++;
        }
        else {
            if (flg && strlen > maxlen) {
                maxlen = strlen;
                pstr = str + i - strlen;
                *(pstr + strlen) = '\0';
            }
            flg = 0;
        }
        i++;
    }    
    if (flg && strlen > maxlen) {
        maxlen = strlen;
        pstr = str + i - strlen;
        *(pstr + strlen) = '\0';
    }
    printf("最长单词:%s %d", pstr, maxlen);
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/742183
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:输入一行字符串,统计出现的各英文字母和数字字符各自出现的次数,英文字母不区别大小写。
  • 除此之外, 这篇博客: 蓝桥杯模拟题 约数个数 【问题描述】<br>1200000有多少个约数(只计算正约数)。<br>【答案提交】<br>这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交中的 问题描述 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1200000有多少个约数?(只计算正约数)
    **【答案提交】**这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

  • 您还可以看一下 程张浩老师的微信小程序项目实战之我画你猜视频课程课程中的 你猜我画小程序功能分析和数据库设计小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    解决方案

    这是一个字符串处理的问题,在C语言中需要注意几点,先用fgets将输入的字符存入字符数组中,然后再用循坏、字符串处理函数找出其中最长的单词。

    代码如下:

    #include <stdio.h>
    #include <string.h>
    
    void longest_word(char *str) {
        int max_len = 0, len = 0, i = 0, start = 0;
        char *p;
        while (str[i] != '\0') {
            // 如果不是字母则重置单词开始位置
            if (str[i] == ' ' || str[i] == '\n') {
                len = 0;
                start = i+1;
                i++;
                continue;
            }
            len++;
            if (len > max_len) {
                max_len = len;
                p = &str[start];
            }
            i++;
        }
        // 将找到的单词输出
        for (i = 0; i < max_len; i++) {
            printf("%c", p[i]);
        }
        printf("\n");
    }
    
    int main() {
        char str[100];
        printf("请输入若干英文单词(每行一个,以#作为结束标记):\n");
        // 读入若干单词,以#作为结束标志
        while (fgets(str, 100, stdin) != NULL) {
            if (str[0] == '#') break;
            longest_word(str);
        }
        return 0;
    }
    

    思路解析:

    首先输入若干单词,以#作为结束标志,可以使用fgets函数实现。接着在longest_word函数中定义变量max_len保存最大单词长度,len保存当前单词长度,start保存当前单词开始位置,p保存最长单词的指针。

    接着采用类似双指针的思路,i0开始,如果遇到非字母字符(例如空格、回车),更新lenstart的值,继续循环;如果遇到字母,则len加1,如果len大于max_len,则更新p的指向。当i循环结束后,p恰好指向最长的单词的第一个字母,这时只需要输出这个单词即可。

    需要注意的是,输入单词时使用fgets函数,这样可以处理遇到空格的情况。输出时使用一个循环输出单词中的每一个字符,同时还要注意输出完单词后要换行。

    参考链接:C语言实现求最长单词


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^