字符串问题:找单词
题目中的要求
1.匹配时不区分大小写
2.除大小写以外完全匹配,如果给定单词仅是文章中某一单词的一部分则不算匹配
解决方案
1.针对Q1,输入后将单词以及文章全部转换成小写
2.针对Q2,查询单词前将单词前后加上空格,并在文章前后加上空格以应对单词在开头和末尾的情况
3.针对输出:输出单词在文章中出现的次数,每次记录下find( )函数返回的这个单词第一次出现的位置,再从这个位置开始继续寻找即可
在此贴出方案3的源码:
int x = article.find(word);//定义x为找到的第一个word的下标
int s = 0;//s为word出现的次数
while (x != -1)//读取整个article直到读完
{
s++;
x = article.find(word, x + 1);//从下标的下一个开始寻找
}
此时s的值就是单词在文章中出现的次数
将以上结合后得到解题的源码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i;
string word, article;
getline(cin, word);
getline(cin, article);
int len1 = word.size();
int len2 = article.size();
for (i = 0; i < len1; i++)
{
if (word[i] >= 'A' && word[i] <= 'Z')
word[i] = word[i] - 'A' + 'a';
}
for (i = 0; i < len2; i++)
{
if (article[i] >= 'A' && article[i] <= 'Z')
article[i] = article[i] - 'A' + 'a';
}
word = ' ' + word + ' ';
article = ' ' + article + ' ';
int n = article.find(word);//在article中寻找word的第一个下标
if (n == -1)//若没找到
cout << -1 << endl;
else//若找到
{
int x = article.find(word);//定义x为找到的第一个word的下标
int s = 0;//s为word出现的次数
while (x != -1)//读取整个article直到读完
{
s++;
x = article.find(word, x + 1);//从下标的下一个开始寻找
}
cout << s << ' ' << n;
}
}