题目描述
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符(' ')、回车符('
')、换行符('
')。
输入描述:
输入一行:待处理的字符串(长度小于100)。
输出描述:
可能有多组测试数据,对于每组数据, 输出一行:转换后的字符串。
示例1
输入
if so, you already have a google account. you can sign in on the right.
输出
If So, You Already Have A Google Account. You Can Sign In On The Right.
解题分析
对字符串进行扫描,并采用记录的方式将间隔符前面的字符数记录下来,判定后直接对小写字母进行更改。
需要注意的是以下几点:
1、对字符串的输入
用cin>>str 这种方法来接收字符串那么录入的str不能包含空格,否则它会按照空格将整个字符串切分成若干段。
如果你要是想输入带空格的字符串那就要用到getline()
#include <iostream> #include <string> using namespace std; string s; getline(cin,s);
2、对最后一个单词的处理,由于字符串的结尾使用的是 ' '
在这里我使用下标标注最后一个字符,读取到最后一个单词。
另外还需要对最后一个单独字符做处理。
3、C中对字母大小写的转换
- 小写字母的ASCII 码大
- 大写字母的ASCII码小
- 大小写字母的ASCII 码相差32
- 数字的ASCII码比字母小 0字符为 48
最后代码如下:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() 6 { 7 string s; 8 getline(cin,s); //对带间隔符的字符串输入 9 int count =0; 10 int i=0; 11 for(i=0;i<s.length();i++) 12 { 13 if(s[i]==' '||s[i]==' '||s[i]==' '||s[i] ==' '||i==s.length()-1) 14 { //考虑最后一个单词 15 if(count!=0&&s[i-count]<='y'&&s[i-count]>='a') 16 s[i-count] = s[i-count]-32; 17 count=0; 18 } 19 else 20 count++; 21 } 22 if(s[i-1]<='y'&&s[i-1]>='a') //若最后一个单词是单独的字符 23 if(s[i-2]==' ') 24 s[i-1]-=32; 25 cout << s <<endl; 26 }