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

C语言首字母缩写函数问题:仅提取每个单词首大写字母

问题拆解

你要实现的是只提取每个单词首大写字母的缩写功能,但当前代码逻辑有问题:

  • 输入"Hello"时能正常输出"H.",但输入"MACinery Bean"会输出"M.C.B.",而你要的是"M.B."
  • 原因是当前代码找的是「大写字母+后面跟着非大写」的字符,这会把"MACinery"里的C也揪出来,可它根本不是单词的首字母。

另外当前代码还有几个小问题:

  • 没把结果存到userAcronym参数里,反而直接用printf输出,不符合函数设计初衷;
  • 用strcpy复制单个字符完全多余,直接取userPhrase[i]就行;
  • 循环里访问userPhrase[i+1],当i走到最后一个字符时会越界,容易触发未定义行为;
  • 没必要手动声明int isupper();,只要包含<ctype.h>头文件即可。
修正后的代码
#include <string.h>
#include <ctype.h>

void CreateAcronym(char userPhrase[50], char userAcronym[50]){
    int len = strlen(userPhrase);
    int acronymIndex = 0;

    for (int i = 0; i < len; i++){
        // 只提取每个单词的首大写字母
        if (isupper(userPhrase[i])){
            // 满足两种情况之一:是字符串开头,或者前一个字符不是大写(说明是新单词的首字母)
            if (i == 0 || !isupper(userPhrase[i-1])){
                userAcronym[acronymIndex++] = userPhrase[i];
                userAcronym[acronymIndex++] = '.';
            }
        }
    }
    // 给结果字符串加结束符,避免乱码
    if (acronymIndex > 0){
        userAcronym[acronymIndex] = '\0';
    } else {
        userAcronym[0] = '\0';
    }

    // 如需打印输出,可保留这行
    printf("%s\n", userAcronym);
}
代码说明
  • 遍历输入字符串时,只提取每个连续大写序列的第一个字符,也就是每个单词的首大写字母;
  • 结果会存入userAcronym参数,符合函数的输出要求;
  • 修复了越界访问的问题,同时处理了空输入的情况;
  • 包含了必要的头文件<ctype.h>(用于isupper)和<string.h>(用于strlen)。

测试示例:

  • 输入"Hello" → 输出"H."
  • 输入"MACinery Bean" → 输出"M.B."
  • 输入"Hello WORLD" → 输出"H.W."

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:37