题目
代码讲解
(2)代码
题目小明想要统计一个单词在文章中出现的次数,并输出第一次重现的为,统计时不区分大小写
输入格式:
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。 1≤第一行单词长度≤10。
1≤文章长度≤2000。
输出格式:
在一行中输出两个整数,分别是单词出现的次数和第一次出现的位置(单词首字母在文章中的位置,位置从0 开始);如果单词没有出现,则直接输出一个整数-1。
输入样例:
在这里给出一组输入。例如:
To
to be or not to be is a question
输出样例:
在这里给出相应的输出。例如:
2 0
代码讲解(1)
C++中substr()函数用法详解
substr()是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。——摘自百科词条
语法
substr(size_type _Off = 0,size_type _Count = npos)
一种构造string的方法
形式 : s.substr(pos, len)
返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
题目不区分大小写,那就大写字母全部转为小写字母。
然后进行遍历,单词的前面除了第一个,其余的前面应该是空格,单词的后面除了最后一个,其余都是空格。
还有就是第一个单词记住位置。
#includeusing namespace std; string s,w; int first,n; int main() { getline(cin,w); getline(cin,s); for(int i=0;i ='A'&&w[i]<='Z') w[i]+=32;//大写变小写 } for(int i=0;i ='A'&&s[i]<='Z') s[i]+=32;//大写变小写 } for(int i=0;i<=s.size()-w.size();i++) { if(s.substr(i,w.size())==w&&(s[i-1]==' '||i==0)&&(s[i+w.size()]==' '||i+w.size()==s.size())) { if(n==0) first=i; n++; } } if(n==0) cout<<-1; else cout<



