P1308 [NOIP 2011 普及组] 统计单词数
📅 2026/7/20 17:07:23
👁️ 阅读次数
📝 编程学习
题目链接:P1308 [NOIP 2011 普及组] 统计单词数
这道题整体不算难,主要是有一个点,他单词之间的空格可能不止一个,即两个单词之间空格可能有多个,这就导致了我刚开始的代码错误。
以下是我的代码:
#include<iostream>usingnamespacestd;#include<string>#include<vector>intans=100000000;#definelllonglongintll cnt=0;boolcompare(string a,string b){if(a.size()!=b.size())returnfalse;else{for(inti=0;i<a.size();i++){if((a[i]!=b[i])&&(a[i]+32!=b[i])&&(a[i]-32!=b[i]))returnfalse;}}returntrue;}intmain(){string a;cin>>a;cin.ignore();string b;string c;inti=0;getline(cin,c);intpoi=0;while(poi<c.size()){while(poi<c.size()&&c[poi]==' '){poi++;}while(poi>=c.size())break;string cw="";intws=poi;while(poi<c.size()&&c[poi]!=' '){cw+=c[poi++];}if(compare(a,cw)){cnt++;ans=min(ans,ws);}}if(ans==100000000)cout<<"-1";else{cout<<cnt<<" "<<ans;}return0;}注意几个细节,这里大小写转换其实是有函数可以直接转换的,但我这里没有用,采用两个ASK码值的差值,在实际做题中,如果忘记了差值为32,也可以进行一个简单的测试即可测试出来,并不需要查询外部资料
//#include<iostream>//using namespace std;//int main() {// cout << 'b' - 'B';// return 0;//}第二个地方即是cin.ignore的作用,deepseek的解释:
所以这句话的作用就是把这个缓冲区里面内容清空了,让他能正常读到后续内容
编程学习
技术分享
实战经验