改作文 | 2022.8.21

题目描述:

Description

小张的英语不太好,今天他又要面临英语作文的困扰了。

终于他在ddl的前一秒完成了他的作文,但是由于太过匆忙,很多单词的大小写出现了问题。

请你在一秒之内帮他改完英语作文吧!

Input

给出若干行字符串表示小张的作文,以EOF结束。

保证文章总长度不超过1000000个字符。

整篇文章只有大小写英文字母,空格,'.',',','?','!'。

并且保证每个标点符号都紧跟前面的单词,单词之间恰好一个空格。

Output

输出修改后的作文,要求每一句第一个单词的首字母大写,其他单词所有字母小写。

'.','?','!'表示每一句的结束。

测试输入期待的输出时间限制内存限制额外进程
用例 
  1. How aRe you?↵
  2. I am fine. and you?↵
  3. i am fine, Too.↵
  4. See yOu.↵
  5. Goodbye.↵
  1. How are you?↵
  2. I am fine. And you?↵
  3. I am fine, too.↵
  4. See you.↵
  5. Goodbye.↵
1秒64M0

这道题目非常简单,我的做法是把字符逐个输入,再立刻逐个输出即可。

引入函数

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上发表文章的首次尝试。

以后会尽可能把自己写过的每一道有价值的题目都拿上来。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值