C语言如何在首字母缩写的字母间插入点号输出指定格式
问题根因
当前代码的CreateAcronym函数仅提取符合规则的大写首字母存入userAcronym数组,未插入要求的分隔点号,直接输出数组只会得到连续字母串IEEE,不符合输出要求。
可行修改方案
两种方案改动量都很小,按需选择即可:
- 方案1:修改缩写生成逻辑,直接生成带点的字符串
存入符合要求的首字母后,紧接着存入一个.字符,最后补字符串结束符即可,主函数的输出逻辑不需要改动。
修改后的CreateAcronym函数代码:void CreateAcronym(char userPhrase[], char userAcronym[]) { int i; int count = 0; for (i = 0; i < strlen(userPhrase); ++i) { if (i == 0 || userPhrase[i - 1] == ' ') { if (isupper(userPhrase[i])) { userAcronym[count++] = userPhrase[i]; userAcronym[count++] = '.'; // 每个首字母后紧跟点号 } } } userAcronym[count] = '\0'; // 补字符串终止符 } - 方案2:保留原缩写生成逻辑,调整输出规则
不改动CreateAcronym函数,替换原有直接打印字符串的逻辑,遍历缩写串的每一个字符,每打印一个字符就紧跟打印一个.即可。
修改后的main函数输出部分代码:int main() { char userPhrase[1000]; char userAcronym[20]; fgets(userPhrase, 1000, stdin); CreateAcronym(userPhrase, userAcronym); // 替换原printf("%s\n", userAcronym); for (int i = 0; userAcronym[i] != '\0'; i++) { printf("%c.", userAcronym[i]); } printf("\n"); return 0; }
验证说明
输入示例Institute of Electrical and Electronics Engineers时,两种方案都会输出预期结果I.E.E.E.。
注意:你定义的
userAcronym[20]数组长度完全够用:按每个首字母占2个字符(字母+点)计算,最多可存9个首字母加1位字符串终止符,覆盖绝大多数日常使用场景,不会出现数组越界问题。
内容的提问来源于stack exchange,提问作者user17918412
相关产品推荐
相关产品推荐

