题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入格式
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int flag = 0;
int first = -1;
int main()
{
string s;
string word;
getline(cin, word);
getline(cin, s);
transform(s.begin(), s.end(), s.begin(), ::tolower);//直接把string里面的字符转换成大写或者小写字符
transform(word.begin(), word.end(), word.begin(),::tolower);
int lens = s.length(), lenw = word.length();
for (int i = 0; i <= lens-lenw; i++)
{
if (s[i] == word[0]&&s[i+lenw-1]==word.back())//先判断头尾是否相等再判断中间字符是否满足
{
int m = 1;
int j = i + 1;
for (; m <lenw-1; m++, j++)
{
if (s[j] != word[m])
break;
}
if (m == lenw-1)
{
if ( (i +lenw- 1 == lens - 1)||( (i + lenw - 1 != lens - 1)&&(s[i +lenw] == ' ')) && (i == 0 || ( i && s[i - 1] == ' ')))
{
flag ++;
if (first == -1)//记录第一次出现的位置
first = i;
}
}
}
}
if (flag == 0)
cout << "-1";
else
cout << flag << " " << first;
return 0;
}