首字母大写
刷题链接: link.
题目描述
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(’ ‘)、制表符(’\t’)、回车符(’\r’)、换行符(’\n’)。
输入描述:
输入一行:待处理的字符串(长度小于100)。
输出描述:
可能有多组测试数据,对于每组数据,输出一行:转换后的字符串。
输入:
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.
注意在修改之前判断首字母是否为小写字母。
我的代码:
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
int l=str.size();
if(str[0]>='a'&&str[0]<='z')
printf("%c",str[0]-32);
else
printf("%c",str[0]);
for(int i=1;i<l;i++)
{
if((str[i-1]==' '||str[i-1]=='\t'||str[i-1]=='\n'||str[i-1]=='\r')&&str[i]>='a'&&str[i]<='z')
printf("%c",str[i]-32);
else
printf("%c",str[i]);
}
cout<<endl;
}
return 0;
}
参考思路:把第一个单词首字母直接作为判断条件,修改字母后直接输出。
参考代码:
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
int l=str.size();
for(int i=0;i<l;i++)
{
if((i==0||(str[i-1]==' '||str[i-1]=='\t'||str[i-1]=='\r'||str[i-1]=='\n'))&&(str[i]>='a'&&str[i]<='z'))
str[i]-=32;
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}
参考思路2:直接使用带有空格的字符数组输入,不需要判断是否是第一个字母的情况。
参考代码2:
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
//freopen("date.txt", "r", stdin);
char str[200] = " ";//初始化为含有一个空格的字符串,而不是空字符串
while(gets(str + 1) != NULL){
for(int i = 1; i < strlen(str); i++)
if((str[i-1] == ' ' || str[i-1] == '\t') && str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
for(int i = 1; i < strlen(str); i++)
printf("%c", str[i]);
printf("\n");
}
return 0;
}