您的位置:首页 > 编程语言 > C语言/C++

统计单词数(C++stl str.find()函数)

2015-06-18 18:25 423 查看




Problem G: 统计单词数

Time Limit: 1 Sec Memory Limit: 128 MB

Submit: 26 Solved: 3

[Submit][Status][Web
Board]

Description

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

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

Input

输入文件共2行。

第1行为一个字符串,其中只包含字母,表示给定单词;

第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

Output

只有1行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。

Sample Input

输入样例1:
To
to be or not to be is a question
输入样例2:
to
Did the Ottoman Empire lose its power at that time

Sample Output

输出样例1:
2 0
输出样例2:
-1

HINT

1<=单词长度<=10。

1<=文章长度<=10,000,000。

NOIP2011 普及组 stat



#include<cstdio>
#include<cstring>
#include<string>
#include<sstream>
#include<set>
#include<iostream>
using namespace std;
int main()
{
    string s,word;
    int i,m,num1,flag,num2,m1;
    while(cin>>s)
    {
       getchar();
       num2=-1;
       flag=num1=m=0;
       for(i=0;i<s.length();i++)
       {
           if(isalpha(s[i]))
           {
               s[i]=tolower(s[i]);
           }
       }
       s=' '+s+' ';
      // cout<<s<<endl;
       getline(cin,word);
      // cout<<word<<endl;
        for(i=0;i<word.length();i++)
        {
            if(isalpha(word[i]))
            {
                word[i]=tolower(word[i]);
            }
        }
        word=' '+word+' ';
       m=word.find(s);
       while(m!=string::npos)
       {
            num1++;
            if(flag==0)
            {
                num2=m;
                flag=1;
            }
           m=word.find(s,m+1);
       }
     //  cout<<num1<<" "<<num2<<endl;
       if(num2==-1)
       {
           cout<<-1<<endl;
       }
       else
       {
           cout<<num1<<" "<<num2<<endl;
       }
    }
}

/*

like
ilikeyoui like

*/
最经典的是这里!s=' '+s+' '这个想法太厉害了!希望能记住1

还有循环!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: