c语言将一个字符串中所有单词的第一个字母改写成大写字母,假定字符串只含有字母与空格,且空格用于区分不同的单词。(例如输入I am a boy,则输出I Am A Boy。)
时间: 2025-01-20 17:10:21 浏览: 41
在C语言中,你可以通过以下步骤来实现这个功能:
1. 首先,你需要创建一个新的字符数组,用于存储转换后的结果。因为你不知道原始字符串的长度,所以需要额外的空间来容纳每个单词首字母的大写形式。
2. 使用`for`循环遍历原字符串。从第二个字符开始,因为第一个字符已经默认是大写的(除非它本身就是小写),遇到空格时,说明当前字符是一个单词的结束,将上一个单词的第一个字母转为大写。
3. 转换单词的第一个字母可以借助`toupper()`函数,该函数接收一个小写字母并返回其大写形式。如果当前字符已经是大写,那么就直接保留。
4. 当找到空格时,将当前字符作为下一个单词的开始,更新新的字符指针,并继续处理下一对字符。
5. 循环结束后,记得检查最后一个单词是否需要添加空格,如果是,则在新数组的末尾追加一个空格。
6. 最后,将新数组的内容复制回原字符串,或者创建一个新的字符串并显示出来。
下面是一个简单的示例代码片段:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void capitalize_words(char *str) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (isspace(str[i])) { // 空格
str[i] = toupper(str[i - 1]); // 转换前一个单词的第一个字母
if (i > 0 && !isspace(str[i - 1])) { // 检查是否需要添加空格
str[i++] = ' '; // 添加空格
}
} else if (isalpha(str[i])) { // 非空格字符且非单词结尾
str[i] = tolower(str[i]); // 字母转为小写
}
}
}
int main() {
char input[] = "I am a boy";
capitalize_words(input);
printf("%s\n", input); // 输出 "I Am A Boy"
return 0;
}
```
阅读全文