【发布时间】:2016-01-21 22:04:14
【问题描述】:
我目前正在学习 C,如果这个问题看起来很简单或新手,那么你知道为什么。另外,在发布此问题之前,我已经在 SO 上进行了搜索。好像有很多,但不是C,而是Java、php等。
我正在开发一个简单的程序,该程序必须将每个单词的第一个字符转换为大写。例如,如果输入是:
你好,我叫克劳迪奥
输出将是
你好,我叫克劳迪奥
这是我到目前为止的代码:
#include <stdio.h>
#include <string.h>
int main(void){
char sentence[21] = {'\0'}, sentence2[21] = {'\0'}, *token = NULL;
fgets(sentence,21,stdin);
token = strtok(sentence," ");
while(token != NULL)
{
*token = toupper(token[0]);
strcat(sentence2,token);
token = strtok(NULL," ");
}
puts(sentence2);
return 0;
}
输出是:
我的名字是克劳迪奥
显然这不是我所期望的,如上所述。我认为我可以通过添加这样的空格来解决问题:
token[strlen(token)+1] = ' ';
strcat(sentence2,token);
但同样,输出不是预期的:
MyAmeSLaudio
因此,为了达到我尝试的预期结果:
null_char = strrchr(token,'\0');
*null_char = ' ';
但这似乎都不是正确的方法。 目前我处于死胡同。有人可以告诉我如何完成我想做的事情吗?
【问题讨论】:
-
遍历
sentence[]数组,并且对于空格后的每个字母,确保它是大写的。 -
char sentence[21]对于样本输入来说很小。frase错字为sentence -
@BLUEPIXY 固定代码。感谢您找出错字。用一种语言思考不容易,用另一种语言书写和阅读并寻找错误:P