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
Author
lcy
解题思路:
这道题,是当时学C的时候,就没有解决的一道题,真是感觉自己大一学的真恶心。
当时出现的问题是什么呢?其实,问题就是不知道对于一个字符流,该怎么从其中提取出来单词呢?原来SB到是不是有一个特定的函数对于一个字符串进行检测
就能得到各个单词QAQ,现在想起来自己真心SB,,,
其实,对于一个字符串来说,要想提取出其中的单词,可以说是很简单的,那就是判断空格个数,从空格为突破口来解决单词查找的问题,比如说,
(1) a bdsdssa asd ad ,这个字符串中有3个空格,那么总共就会有4个单词了,所以说,一个字符串中单词的个数的等于的是空格的个数加1了!
那么怎么才能从一个字符串中把所有的字符都提取出来呢?其实,也不难,仔细想想也很简单,那就是写一个if(s[i]!=' '&&s[i-1]==' '),这个条件的出现
就会很容易的把每个单词的首字母提取出来了,然后对他想怎么进行操作就可以了,这道题目是让小写变成大写,那么我们就用a[i] - 32就会把小写字母
变成大写了。
(2) 好了,这道题,就是这样了,希望大家和我一样有所收获,慢慢的积累,慢慢的学习,肯定会成为神犇的!
代码:
# include<cstdio> # include<iostream> # include<cstring> using namespace std; # define MAX 123 char s[MAX]; int main(void) { while ( gets(s) ) { int len = strlen(s); if ( s[0] != ' ' ) s[0]-=32; for ( int i = 1;i < len;i++ ) { if ( s[i]!=' '&&s[i-1] ==' ' ) s[i]-=32; } puts(s); } return 0; }