做法分析
来一个 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. 本代码已开启反抄袭,但不影响阅读。