【题解】洛谷-CF147A Punctuation

做法分析

来一个 getchar 的做法。

用 getchar 有一个坑点需要注意:

在标点输出空格后,后面字母前面不能再输出空格!

然后主要的模拟流程就是:

  • 读入

    • 如果是换行符:break 掉。

    • 如果是空格:如果没有标点标记,打一个空格标记 space。

    • 如果是标点符号:去掉空格标记,输出符号后面再输出一个空格,打一个 标点标记 dots。

    • 如果是字母:如果有空格标记,输出一个空格、去掉空格标记、标点标记,再输出这个字母。

空格标记的作用:只输出一个空格。

标点标记的作用:在例如 haraki_,____a juruo 时避免输出两个空格。(下划线代表空格)

Code

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
	int space=0,dots=0;
	while(1){
		char c=getchar();
		if(c=='
')break;//换行
		else if(c==' '){
			if(space==0&&dots==0){//标记空格flag
				space=1;
			}
		}else if(c=='.'||c==','||c=='!'||c=='?'){//标点
			space=0;
			dots=1;
			cout<<c<<" ";
		}else{
			if(space==1){//输出一个空格
				cout<<" ";
				space=0;
			}
			cout<<c;
			dots=0;
		}
	return 0;
}

P.S. 本代码已开启反抄袭,但不影响阅读。

原文地址:https://www.cnblogs.com/haraki/p/solution_CF147A.html