第一次提交的错误代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,sum=0,flag=0,lenK,lenT;
string Keyw;// 关键词打算录入Keyw
string Text[100000];
//文章打算录入Text数组,最多有100000个单词,
//所以让它有100000行,一行一个单词
cin>>Keyw;
lenK=Keyw.size();//获取Keyw的长度
for(i=0;i<lenK;i++){//Keyw全转大写
Keyw[i]=toupper(Keyw[i]);
}
for(i=0;i<=100000;i++){//这里就必须有100000个输入才能结束,***问题所在***
cin>>Text[i];//这里使用cin输入,每个单词用空格隔开,正好是Text数组一行输入完毕
lenT=Text[i].size();//获取Text中单个文字的长度
for(j=0;j<lenT;j++){//j循环结束则该行字母转大写,i循环结束则Text所有字母转大写
Text[i][j]=toupper(Text[i][j]);
}
}
for(i=0;i<100000;i++){
//if(Text[i]=='\0')break;//检测到Text当前行为空,意味着文章结束,终止循环
if(Keyw==Text[i]){//检测到关键字与Text当前行单词一致,sum计数增一
sum++;
}
}
for(i=0;i<100000;i++){
if(Keyw==Text[i]){//检测到第一个匹配单词,标记flag
flag=i;
}
}
if(sum==0){
cout<<(0-1);
}
else{
cout<<sum<<' '<<flag;
}
}
问题在于输入Text[i]的时候,必须要检测到100000个输入项才结束循环,所以,得重做TvT
AC的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
string keyw,text;
string::size_type result;
getline(cin,keyw);
getline(cin,text);//按行输入的方法
keyw=' '+keyw+' ';
text=' '+text+' ';
for(i=0;i<keyw.length();i++){
keyw[i]=tolower(keyw[i]);
}
for(i=0;i<text.length();i++){
text[i]=tolower(text[i]);
}//全部转换为小写(转化大写为toupper)
//cout<<keyw<<endl<<text;
result=text.find(keyw);//问题出在我不知道str.find()函数
if(result==string::npos){
cout<<-1;
}else{
int first=text.find(keyw);
int pos=text.find(keyw);
int count=0;
while(pos!=string::npos){
count++;
pos=text.find(keyw,pos+1);//从下一个pos继续查找
} //注意,这里绝对不能写pos++
cout<<count<<' '<<first;
}
}