P1308 [NOIP 2011 普及组] 统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1),如果给定单词仅是文章中某一单词的一部分则不算匹配。

思路心得

首先一点是要注意将字母统一转换成大写或者小写,可以使用tolower函数。其次是不能匹配单词仅是另一单词的一部分的情况。这一点解决比较妙的方法是可以在单词和待匹配句子前后都加上空格。匹配成功后,pos+1就可以继续接着匹配,直到返回-1为止。

AC代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string line1;
    getline(cin,line1);
    string line2;
    getline(cin, line2);
    int count = 0;
    line1 = ' ' + line1 + ' ';
    line2 = ' ' + line2 + ' ';
    for (int i = 0;i<line1.size();i++)
        {
            line1[i] = tolower(line1[i]);
        }
    for (int i = 0;i<line2.size();i++)
        {
            line2[i] = tolower(line2[i]);
        }
    int pos = line2.find(line1);
    if(pos==-1)
    {
        cout << -1;
        return 0;
    }
    else{
        int first = pos;
        pos = pos+1;
        while(pos!=-1)
            {
                count+=1;
                pos = line2.find(line1, pos+1);
                
            }
        cout<<count<<" "<<first;
    }
}

Logo

集算法之大成!助力oier实现梦想!

更多推荐