求助cin边读边处理, 样例能过, 最后只过了2个点...

P1308 [NOIP2011 普及组] 统计单词数

![](https://cdn.luogu.com.cn/upload/image_hosting/hens0bzr.png?x-oss-process=image/resize,m_lfit,h_170,w_225) 为啥我的输入题目样例,按换行后卡着不动了?死循环?还是别的原因?(我是蓝名!不是神犇!)
by Rieman_sum @ 2023-02-13 19:40:43


@[Guo1](/user/743879) 你是不是应该先把 freopen 这行去掉。
by Infinite_Eternity @ 2023-02-13 19:42:11


第$20$行注释掉了,还要注释别的吗(难道文件操作不是无法输入吗)?
by Rieman_sum @ 2023-02-13 19:43:42


@[_DANCER_](/user/925190) 如果第二行开头有空格呢?如果单词之间有两个空格呢?
by ud2_ @ 2023-02-13 19:51:51


@[ud2_](/user/206953) 噢, 多空格的情况我确实没有考虑到, 谢谢谢谢orz
by _DANCER_ @ 2023-02-13 20:33:33


后来改了, 已经过了, 谢谢orz... ```cpp #include<iostream> #include<string> using namespace std; string change(string s) { int len=s.length(); string o=""; for(int i=0;i<len;i++) { if(s[i]>='A'&&s[i]<='Z') o+=s[i]-'A'+'a'; else o+=s[i]; } return o; } int main() { //freopen("D:\\System_folders\\Desktop\\C++(g++)\\packet\\P1308.in","r",stdin); string check,s=""; cin>>check; check=change(check); int first=0,ans=0; bool flag=0,p1=1; char c; while((c=getchar())!=EOF) { if(c!=' '&&!isalpha(c)) continue; if(!flag) first++; if(c==' ') { if(change(s)==check) { if(!flag) { flag=1; first-=s.length()+1; } ans++; } s=""; } else if(isalpha(c)) s+=c; } if(s!=""&&change(s)==check) { if(!flag) { flag=1; first-=s.length(); } ans++; } if(ans==0) cout<<-1; else cout<<ans<<" "<<first; return 0; } ```
by _DANCER_ @ 2023-02-14 10:54:57


|