您的位置:首页 > 其它

ZCMU-1750

2016-12-29 22:42 507 查看

1750: 统计单词数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 316  Solved: 56

[Submit][Status][Web
Board]

Description

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

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

Input

输入文件共2行。

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

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

Output

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

Sample Input

To

to be or not to be is a question

to

Did the Ottoman Empire lose its power at that time

Sample Output

2 0-1

HINT

1<=单词长度<=10。

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

NOIP2011 普及组 stat

【解析】

其实这道题就是用string的查找函数,那么这里我们有套路就是把string改成“ string ”这个字符串的前后也加一个空格,这样相当于每一个单词是空格单词空格,分别在前
ccdd
后加一个空格那样的话就比较好查找,tolower是转换成小写,isalpha函数是判断是否是英文字母比较好判断了。#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+' ';
getline(cin,word);
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);//在m+1处往后继续寻找
}
if(num2==-1)
{
cout<<-1<<endl;
}
else
{
cout<<num1<<" "<<num2<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: