P1249-首字母大写
P1249-首字母大写
Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample
Input
i like acm
i want to get an accepted
Output
I Like Acm
I Want To Get An Accepted
思路概况
这是一道比较典型的字符串问题,着重考虑题目中的细节问题
- 单个字符出现在段中如何解决
- 首字符原本就是大写如何解决
除此之外,由于是除此涉及算法题目,通过这道题,我们也可以学习到
- C++ String变量的输入输出
- C++ String变量的判空和置空
代码编写
ASCII码解题
#include<stdio.h>
int main(){
char s[100];
while(gets(s)){
int len = strlen(s);
if(s[0]!=' '||s[0]!='\n'||s[0]!='\t')
s[0]=s[0]-32;
for(int i=1;i<len;i++)
{
int flag=0;
if(s[i]>='a'&&s[i]<='z')
flag=1;
if((s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i+1]!=' '||s[i+1]!='\n'||s[i+1]!='\t')&&flag)
{
s[i]=s[i]-32;
}
else if(i!=len&&(s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i]!=' '||s[i]!='\n'||s[i]!='\t')&&flag)
{
s[i]=s[i]-32;
}
}
for(int i=0;i<len;i++)
{
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}
String变量解题
#include<bits/stdc++.h>
using namespace std;
//字符串解决首字母大写问题
int main(){
string s;
while(getline(cin,s)){
if(s[0]==' '||s[0]=='\n'||s[0]=='\t'||s.empty())
break;
int len=s.length();
if(s[0]!=' '||s[0]!='\n'||s[0]!='\t')
s[0]=s[0]-32;
for(int i=1;i<len;i++)
{
int flag=0;
if(s[i]>='a'&&s[i]<='z')
flag=1;
if((s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i+1]!=' '||s[i+1]!='\n'||s[i+1]!='\t')&&flag)
{
s[i]=s[i]-32;
}
else if(i!=len&&(s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\n')&&(s[i]!=' '||s[i]!='\n'||s[i]!='\t')&&flag)
{
s[i]=s[i]-32;
}
}
cout<<s<<endl;
s.clear();
}
}
收获总结
- C语言中,循环读入带空字符串使用的是gets()函数,而在C++中,我们可以使用string变量的getline()函数来解决这个问题;
- C++中判断String变量是否为空,我们可以使用s.empty()函数;
- C++中清空String变量,我们可以使用s.clear()函数;
- C++中判断String变量长度,我们可以使用s.length()函数;而在C语言中,我们可以使用strlen()函数;