啊,我改了一点你的代码,但是思路跟你的是一样的不知道你能不能看得懂,不过我自己用这代码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