如何在C语言中使用toupper库函数实现姓名首字母大写提取?
姓名首字母大写提取问题解决
需求:提取姓名的首字母并以大写形式输出,例如输入tyler jae woodbury时输出TJW,现有代码无法实现大写转换,还存在字符串未终止的潜在问题。
现有代码:
#include <stdio.h> #include <cs50.h> #include <ctype.h> #include <string.h> string get_initials(string name, char initials[]); int main(void) { // 用户输入 string name = get_string("Name: "); // 获取用户首字母 char initials[10]; get_initials(name, initials); printf("%s\n", initials); } string get_initials(string name, char initials[]) { int counter = 0; for (int i = 0, n = strlen(name); i < n; i++) { if (name[i] == ' ') { initials[counter] = name[i+1]; counter++; } else if (i == 0) { initials[counter] = name[i]; counter++; } } return initials; }
修改方案
要实现大写转换并修复输出乱码问题,只需两处修改:
- 用
<ctype.h>中定义的toupper()函数,对每个提取到的首字母做大写转换——该函数可将小写字符转为大写,大写字符保持不变。 - 循环结束后给
initials数组添加字符串终止符'\0',确保C语言能正确识别为合法字符串,避免输出垃圾数据。
修改后的代码:
#include <stdio.h> #include <cs50.h> #include <ctype.h> #include <string.h> string get_initials(string name, char initials[]); int main(void) { // 用户输入 string name = get_string("Name: "); // 获取用户首字母 char initials[10]; get_initials(name, initials); printf("%s\n", initials); } string get_initials(string name, char initials[]) { int counter = 0; for (int i = 0, n = strlen(name); i < n; i++) { if (name[i] == ' ') { // 对空格后的首字母做大写转换 initials[counter] = toupper(name[i+1]); counter++; } else if (i == 0) { // 对第一个单词的首字母做大写转换 initials[counter] = toupper(name[i]); counter++; } } // 添加字符串终止符,确保输出正常 initials[counter] = '\0'; return initials; }
关键说明
toupper()接收单个字符参数,直接用它处理提取到的每个首字母,就能实现大写输出。- 必须添加
'\0':C语言中字符串以该字符标记结束位置,缺失会导致printf("%s")读取数组后续的无效数据,出现乱码。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

