题源:http://acm.hdu.edu.cn/showproblem.php?pid=2026
Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
————————————————————————————————
思路:一个简单的字符串题目。简单分析可知(然鹅我还是没有分析出来)除第一个外,需要我们改成字母大写的字母前面均有空格。那么我们设一个变量flag,初始化为0,如果遇到字母a~z(因为刚上来都是小写),就变成对应的大写,flag置1(变成大写的方法就是在原来编号的基础上减32,参考acsii码表);如果遇到空格,flag就置0,然后空格后面的小写字母自然就变成大写啦!下面是AC代码。
#include<stdio.h>
#include<string.h>
int main()
{
int i,flag;
char s[100];
while(scanf("%c",&s[0])!=EOF){
gets(&s[1]);
flag=0; //因为第一个字母要变成大写,但前面没空格,所以先置0
for(i=0;i<strlen(s);i++){
if(s[i]==' ') flag=0; //如果这个是空格 flag置0
if(s[i]>='a'&&s[i]<='z'){ //如果现在是小写字母
if(flag==0){ //并且上一个是空格 说明是首字母
flag=1; //flag置1且小写变大写
s[i]-=32;
}
}
}
puts(s);
}
return 0;
}