You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言单词首字母大写、其余小写功能调试求助

问题分析与代码修正

你的需求是将字符串中每个单词的首字母大写,其余字母小写,同时去除多余空格。当前代码的问题主要集中在main函数的字符处理逻辑上,以下是具体问题和修正方案:

原代码的核心错误

  1. 字符比较错误:使用双引号" "比较字符,这是字符串字面量,应该用单引号' '来表示单个空格字符。
  2. 循环逻辑混乱:遇到空格后直接break跳出循环,导致后续单词完全没有处理;内部的j循环逻辑无效,无法处理第二个单词的首字母。
  3. 未统一处理单词首字母:第一个单词的首字母依赖原输入的大写,未主动转大写;后续单词的首字母完全没有处理转大写的逻辑。

修正后的完整代码

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

#define SIZE 100

void xoa(char s[100], int v)
{
    int len = strlen(s);
    for (int i = v; i < len; i++)
        s[i] = s[i + 1]; 
    s[len - 1] = '\0'; 
}

void xoakt(char *s)
{
    // 去掉中间连续的空格
    for (int i = 0; i < strlen(s); i++)
        if (s[i] == ' ' && s[i + 1] == ' ') 
        {
            xoa(s, i);
            i--; // 删除字符后回退索引,重新检查当前位置
        }
    
    // 去掉开头的空格
    if (s[0] == ' ')
        xoa(s, 0);
    
    // 去掉结尾的空格
    int len = strlen(s);
    if (len > 0 && s[len - 1] == ' ')
        xoa(s, len - 1);
}

int main()
{
    char s[SIZE];

    printf("Enter string: ");
    fgets(s, SIZE, stdin);
    
    // 先去除多余空格
    xoakt(s);
    
    int len = strlen(s);
    if (len == 0) {
        printf("\n");
        return 0;
    }

    // 处理第一个单词的首字母
    if (isalpha(s[0])) {
        s[0] = toupper(s[0]);
    }

    // 遍历后续字符,处理每个单词的首字母和其余小写
    for (int i = 1; i < len; i++) 
    {
        // 如果当前是空格,且下一个字符是字母,转大写
        if (s[i] == ' ' && i + 1 < len && isalpha(s[i+1])) {
            s[i+1] = toupper(s[i+1]);
            i++; // 跳过已处理的首字母,避免重复处理
        } else {
            // 非首字母的字母转小写
            if (isalpha(s[i])) {
                s[i] = tolower(s[i]);
            }
        }
    }

    printf("%s\n", s);
    return 0;
}

关键修正点说明

  1. 字符比较修正:所有空格比较改为' ',符合C语言字符的表示规则。
  2. 首字母统一处理:主动将第一个字符转为大写,确保无论原输入是什么,首字母都是大写。
  3. 遍历逻辑优化:
    • 遍历字符串时,遇到空格则检查下一个字符,若是字母则转大写,并跳过该首字母避免重复处理。
    • 其余字母统一转为小写,确保非首字母的大小写都符合要求。
  4. 边界条件处理:增加了空字符串的判断,避免空指针错误。

测试输入 PrOgRaMmInG MeThOd ,修正后的代码会输出Programming Method,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:44:53