1. 程式人生 > 實用技巧 >【題解】洛谷-CF147A Punctuation

【題解】洛谷-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=='\n')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. 本程式碼已開啟反抄襲,但不影響閱讀。