2301_80720240 2023-11-26 18:43 采纳率: 0%
浏览 4

提问:下面代码该如何改错并优化

img


该段代码是要找出输入字符串中最长的单词并输出。
输入 i am going 输出结果为am,看不出来那里有问题了😭😭求问怎么改

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-26 20:42
    关注

    【以下回答由 GPT 生成】

    问题分析:
    1. 代码中使用了过时的函数gets,应该改为使用fgets来读取输入字符串。
    2. 代码中没有考虑到输入字符串的长度超过1001的情况,应该在读取输入字符串前进行长度检查,防止溢出。
    3. 代码中for循环的终止条件应为i<1001,而不是i<100。
    4. 在循环中,每次判读是否为单词的结束时,应该考虑到单词结尾可能是字符串的结尾,应该增加一个判断条件b[i]!='\0'。
    5. 在找到最长单词后,应该考虑到最后一个单词可能是最长单词,需要增加一个判断条件判断是否i==1000。
    6. 在输出最长单词时,应该使用puts函数而不是逐个字符使用printf函数。
    7. 变量命名不够清晰,应该使用更加具有意义的变量名。
    
    优化后的代码如下:
    
    #include <stdio.h>
    #include <string.h>
    
    void findLongestWord(char b[1001]) {
        int i, wordLength, longestWordLength, longestWordIndex;
        int length = strlen(b);
    
        for(i=0, wordLength=0, longestWordLength=0, longestWordIndex=0; i<length && i<1001; i++) {
            if(b[i] != ' ') {
                wordLength++;
            } else if(b[i] == ' ' || b[i] == '\0') {
                if(longestWordLength <= wordLength || i==1000) {
                    longestWordLength = wordLength;
                    wordLength = 0;
                    longestWordIndex = i - longestWordLength;
                } else {
                    wordLength = 0;
                }
            }
        }
    
        printf("最长的单词为:\n");
        puts(&b[longestWordIndex]);
    }
    
    int main() {
        char a[1001];
        printf("请输入一个字符串:\n");
        fgets(a, sizeof(a), stdin);
        findLongestWord(a);
        return 0;
    }
    

    ```


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

报告相同问题?

问题事件

  • 创建了问题 11月26日