题目描述:
Description
小张的英语不太好,今天他又要面临英语作文的困扰了。
终于他在ddl的前一秒完成了他的作文,但是由于太过匆忙,很多单词的大小写出现了问题。
请你在一秒之内帮他改完英语作文吧!
Input
给出若干行字符串表示小张的作文,以EOF结束。
保证文章总长度不超过1000000个字符。
整篇文章只有大小写英文字母,空格,'.',',','?','!'。
并且保证每个标点符号都紧跟前面的单词,单词之间恰好一个空格。
Output
输出修改后的作文,要求每一句第一个单词的首字母大写,其他单词所有字母小写。
'.','?','!'表示每一句的结束。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
用例 |
|
| 1秒 | 64M | 0 |
这道题目非常简单,我的做法是把字符逐个输入,再立刻逐个输出即可。
引入函数
int judge(char c){
if (c==' ' || c==',' || c=='\n') return 0;
if (c=='!' || c=='?' || c=='.') return 1;
if (c>='a' && c<='z') return 2;
if (c>='A' && c<='Z') return 3;
}
//judge函数用来判断该字符的类型。
char upper(char c) {
if (c>='a' && c<='z') c = c - 'a' + 'A';
return c;
}
//upper函数的作用是不论该字母是大写还是小写,均将其转化为大写。
char lower(char c) {
if (c>='A' && c<='Z') c = c - 'A' + 'a';
return c;
}
//lower函数的作用是不论该字母是大写还是小写,均将其转化为小写。
这样,对每一个输入的字符,作出合适的判断,然后再输出即可。
代码如下
#include <stdio.h>
char c;
int main() {
int judge(char);
char upper(char);
char lower(char);
int capital_flag=1,j;
//当capital_flag为1时,表明下一个字母应当是大写;当为0时,表明下一个字母应当是小写。
while ((c=getchar())!=EOF) {
j = judge(c);
if (j==0) putchar(c);
//如果是逗号、空格或回车,则直接输出,capital_flag状态不变;
else if (j==1) {
putchar(c); capital_flag = 1;
}
//如果是句末标点,则直接输出这个标点,并且将capital_flag置为1;
else { //字符c是一个字母
if (capital_flag==1) {
c = upper(c); putchar(c);
capital_flag = 0;
}
//如果capital_flag是1,则输出大写字母,并将capital_flag置为0;
else {
c = lower(c); putchar(c);
}
//如果capital_flag不是1,则输出小写字母。
}
}
return 0;
}
int judge(char c){
if (c==' ' || c==',' || c=='\n') return 0;
if (c=='!' || c=='?' || c=='.') return 1;
if (c>='a' && c<='z') return 2;
if (c>='A' && c<='Z') return 3;
}
char upper(char c) {
if (c>='a' && c<='z') c = c - 'a' + 'A';
return c;
}
char lower(char c) {
if (c>='A' && c<='Z') c = c - 'A' + 'a';
return c;
}
这道题目其实非常简单,算是我在CSDN上发表文章的首次尝试。
以后会尽可能把自己写过的每一道有价值的题目都拿上来。