ZCMU-1750
2016-12-29 22:42
507 查看
1750: 统计单词数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 316 Solved: 56
[Submit][Status][Web
Board]
Description
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即单词必须与文章中某一独立残次在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
Input
输入文件共2行。第1行为一个字符串,其中只包含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
Output
只有1行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。Sample Input
Toto be or not to be is a question
to
Did the Ottoman Empire lose its power at that time
Sample Output
2 0-1HINT
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;
}
相关文章推荐
- PHP安全之Web攻击
- c++时间转换与表示之04(与日期和时间相关的函数及应用)
- Android日记——2016-12-29
- 好气呀,但是要保持微笑
- 成员变量和局部变量的区别
- 文章标题
- 在CentOS上解压含有中文名的ZIP文件出现乱码的解决办法
- 静态变量和成员变量的区别
- shmread
- apache2+cgi
- python----------反射和设计模式
- Stream语法详解
- JavaScript 输出数据的方式
- 极光推送
- 对手机联系人的读取
- SVN使用
- Coursera 零基础Python入门系列课程习题解答
- Hive ROW_NUMBER,RANK(),DENSE_RANK()
- 自动识别OpenCV版本并添加依赖库
- Simulink 中S-function 包含C文件的用法