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

C语言字符串驼峰转换代码问题:空格与重复字符排查及修正

问题排查与代码修正

问题根源

从你给出的输入输出对比,能明确两个bug:

  • 字符重复:空格后的首字母被重复输出(比如woRLD变成Wworld)——原因是处理空格时没跳过空格本身,循环后续又处理了一次空格后的字符,等于同一个字符被转大写后又被转小写存了一遍
  • 空格处理逻辑混乱:看似空格没消除,实则是空格的处理导致后续字符被重复处理,掩盖了空格的问题,但本质是没正确跳过空格字符

修正后的可运行代码

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

void toCamelCase(char *str) {
    int strLen = strlen(str);
    int resultIndex = 0;

    // 处理首字母:统一转小写
    if (strLen > 0) {
        str[resultIndex++] = tolower(str[0]);
    }

    for (int i = 1; i < strLen; i++) {
        if (str[i] == ' ') {
            // 跳过当前空格
            i++;
            // 防止数组越界
            if (i >= strLen) break;
            // 空格后的首字母转大写存入结果
            str[resultIndex++] = toupper(str[i]);
        } else {
            // 其余字符统一转小写
            str[resultIndex++] = tolower(str[i]);
        }
    }
    // 给处理后的字符串加结束符,避免乱码
    str[resultIndex] = '\0';
}

int main() {
    char testInput[] = "PeNCIL Are MAde Of Lead";
    toCamelCase(testInput);
    printf("%s\n", testInput); // 输出:pencilAreMadeOfLead

    char anotherTest[] = "HEllO woRLD my NmaE is";
    toCamelCase(anotherTest);
    printf("%s\n", anotherTest); // 输出:helloWorldMyNmaeIs
    return 0;
}

关键修正说明

  • 首字母单独处理:确保整个字符串的第一个字符是小写,符合你要的驼峰格式
  • 空格处理逻辑优化:遇到空格时先i++跳过空格,再处理后面的字符转大写,彻底避免重复处理同一个字符
  • 添加字符串结束符:处理完后手动加'\0',防止原字符串长度比处理后的长,导致输出乱码
  • 边界检查:跳过空格后判断索引是否越界,避免访问数组外的内存引发崩溃

测试结果

输入PeNCIL Are MAde Of Lead会输出pencilAreMadeOfLead,输入HEllO woRLD my NmaE is会输出helloWorldMyNmaeIs,完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:14