【題解】洛谷-CF147A Punctuation
阿新 • • 發佈:2020-11-14
做法分析
來一個 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. 本程式碼已開啟反抄襲,但不影響閱讀。