Description
小张的英语不太好,今天他又要面临英语作文的困扰了。
终于他在ddl的前一秒完成了他的作文,但是由于太过匆忙,很多单词的大小写出现了问题。
请你在一秒之内帮他改完英语作文吧!
Input
给出若干行字符串表示小张的作文,以EOF结束。
保证文章总长度不超过1000000个字符。
整篇文章只有大小写英文字母,空格,'.',',','?','!'。
并且保证每个标点符号都紧跟前面的单词,单词之间恰好一个空格。
Output
输出修改后的作文,要求每一句第一个单词的首字母大写,其他单词所有字母小写。
'.','?','!'表示每一句的结束。
样例:
How aRe you? I am fine. and you? i am fine, Too. See yOu. Goodbye.
输出:
How are you? I am fine. And you? I am fine, too. See you. Goodbye.
解题思路:
利用gets读入一行,再立一个flag,然后遍历这一行,如果flag=1遇到小写就把他变成大写,当flag=0如果遇到大写就把他变成小写,当遇到截止的标点符号就把flag再次改成1。
代码:
#include<iostream>
#include<cstring>
#include <algorithm>
using namespace std;
int main(){
char c[1000100];
while(gets(c)){
if(strlen(c)==0)return 0;
int flag=1;
int x=strlen(c)-1;
for(int i=0;i<=x;i++){
if(flag){if(c[i]>='a'&&c[i]<='z')c[i]+='A'-'a';//转换大小写
if(c[i]>='A'&&c[i]<='Z')flag=0;
}
else{
if(c[i]>='A'&&c[i]<='Z'){
c[i]+='a'-'A';
}
if(c[i]=='!'||c[i]=='.'||c[i]=='?')flag=1;
}
printf("%c",c[i]);
}
puts("");
}
}
更简短的
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
char c;int flag=1;
while(c=getchar()){
if(flag){if(c>='a'&&c<='z')c+='A'-'a';
if(c>='A'&&c<='Z')flag=0;
}
else{
if(c>='A'&&c<='Z')c+='a'-'A';
if(c=='!'||c=='.'||c=='?')flag=1;
}
putchar(c);
}
}