80分了,第五和第九个测试没过,卡几天了,求dalao萌看看。

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

啊,我改了一点你的代码,但是思路跟你的是一样的不知道你能不能看得懂,不过我自己用这代码AC了。。代码里面的注释有些是标给我自己看的来着,有些是删改部分代码的原因和建议,格式挺乱的,就凑活着看吧。不懂的可以追问啦。 ```cpp #include <iostream> #include <cstring> using namespace std; string s2, s1; //我是大括号必换行的邪教啦啦啦 void init() { getline(cin, s1, '\n'); getline(cin, s2); } int main () { int n=0,count=0,i=0,pos=-1; bool is; init();//为了方便阅读,我把输入弄函数里了 //i=0; 为了代码的整洁,上面写过的就不用再写啦,如果不确定上面会不会赋值,就换到下面来定义i while(i<s2.length()) { if((s2[i]==s1[0]-32) ||(s2[i]==s1[0]+32) ||(s2[i]==s1[0]))//当前已找到查找串中对应单词的头字母 { if(i>0) { if(s2[i-1]!=' ')//并不是一个单独的单词,不算个数 { i++; continue; } } int z=i+1;//查找串的第二个字母 is=1;//1代表true 0代表false 偷个懒 //假设当前的单词是对应的,这样会比一对一的校验效率更高一些,因为只要举出一个反例就能否定全场 //这个唱反调思想得划重点 for(int j=1;j<s1.length();j++) { if((s2[z]!=s1[j]) &&(s2[z]!=s1[j]-32) &&(s2[z]!=s1[j]+32))//这个就是反例,但是要注意用的是&&不是||我之前就是这里翻了 { is=0; break; } z++; } if(s2[z]!=' ')//z指向的是查找串中最后一个字符加1 如果单词后面跟的不是‘ ’那就不算数,同样是唱反调思想 is=0; if(is==1) { count++; if(pos==-1) pos=i; } } i++; } if(count==0) cout<<-1; else cout<<count<<" "<<pos; } ```
by 十熙 @ 2019-11-24 02:00:05


谢谢大佬哈,再看完你的代码后,我反复测试寻找是哪段代码的问题。之后发现我的代码对于一个字母的单词(a)查找是有问题的,这是代码的逻辑错误。谢谢大佬啦,嘻嘻。
by Danny_Archer @ 2019-11-30 15:01:48


|