You need to enable JavaScript to run this app. C语言代码优化:实现输出大写形式的最后单词并移除特殊字符与数字
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码优化:实现输出大写形式的最后单词并移除特殊字符与数字

C语言代码调整方案

核心修改点

  • 补全last_word指针的初始化兜底:原代码如果字符串开头直接是单词(没有前置空格),last_word会是未初始化的野指针,触发程序崩溃,需要先判断字符串首个非空字符的位置,给last_word赋初始值。
  • 调整字符遍历的终止条件:原代码用last_word[i] > 32判断单词结束,会把ASCII值大于32的数字、标点、特殊字符都纳入遍历范围,替换为遇到字符串结束符\0就停止遍历。
  • 新增字符过滤和转换逻辑:遍历每个字符时,跳过所有非英文字母的内容(数字、特殊符号),对小写字母统一减32转换为大写后输出,大写字母直接输出。

修改后完整可运行代码

#include <stdio.h>
#include <unistd.h>

int main()
{
    char line[80] = "abc dfg, egh.";
    int i = 0;
    char *last_word = NULL;

    // 兜底处理:字符串开头直接为非空可打印字符时,直接将起始位置指向字符串开头
    if (line[0] > 32) {
        last_word = line;
    }

    // 定位最后一段连续可打印内容的起始位置
    while (line[i] != '\0')
    {
        if (line[i] <= 32 && line[i + 1] > 32)
            last_word = &line[i + 1];
        i++;
    }

    // 遍历目标内容,过滤非字母字符、转换小写为大写
    i = 0;
    while (last_word && last_word[i] != '\0')
    {
        char cur = last_word[i];
        // 大写字母直接输出
        if (cur >= 'A' && cur <= 'Z') {
            write(1, &cur, 1);
        }
        // 小写字母转大写后输出
        else if (cur >= 'a' && cur <= 'z') {
            cur -= 32;
            write(1, &cur, 1);
        }
        // 数字、标点、特殊字符直接跳过不输出
        i++;
    }
    return 0;
}

效果说明

针对示例输入"abc dfg, egh.",修改后的程序会自动定位到最后一段内容egh.,过滤掉末尾的句号,将小写的e、g、h转为大写,最终输出EGH。代码保持了原有的write系统调用输出逻辑,没有引入额外的重依赖库函数。


内容的提问来源于stack exchange,提问作者Mahmoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 14:45:05