每日一题——第七十八题

题目:编写一函数,输入一行字符,将此字符串中最长的单词输出

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

void printLongestWord(char* str);

int main() {
    char input[1024]; // 假设输入不会超过1023个字符  
    printf("请输入一行字符(回车结束):");
    fgets(input, sizeof(input), stdin); // 读取一行字符  
    // 去除换行符(如果有的话)  
    input[strcspn(input, "\n")] = 0;

    printLongestWord(input);

    return 0;
}

void printLongestWord(char* str) {
    int maxLength = 0; // 最长单词的长度  
    int currentLength = 0; // 当前单词的长度  
    int startIndex = 0; // 最长单词开始的索引  
    int isWord = 0; // 标记是否在单词内部  

    for (int i = 0; str[i] != '\0'; i++) {

        if (str[i] != ' ') { // 遇到一个非空格字符  
            if (!isWord) { // 如果之前不在单词内部,则开始新的单词  
                startIndex = i;
                isWord = 1;//标记在单词内部
            }
            currentLength++; // 增加当前单词的长度  
        }
        else { // 遇到一个空格  
            if (isWord) { // 如果之前处于单词内部  
                if (currentLength > maxLength) { // 当前单词是迄今为止最长的  
                    maxLength = currentLength;
                    startIndex = i - maxLength; // 更新最长单词的起始索引  
                }
                currentLength = 0; // 重置当前单词的长度  
                isWord = 0; // 标记不再处于单词内部  
            }
        }
    }

    // 处理字符串末尾的单词  
    if (isWord && currentLength > maxLength) {
        maxLength = currentLength;
        startIndex = strlen(str) - maxLength; // 更新最长单词的起始索引  
    }

    // 输出最长单词  
    if (maxLength > 0) {
        printf("最长的单词是:%.*s\n", maxLength, str + startIndex);//输出从给定字符串(本例中是str + startIndex)开始的、长度为maxLength的子字符串
    }
    else {
        printf("没有输入单词。\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值