统计单词数(C++stl str.find()函数)
2015-06-18 18:25
423 查看
Problem G: 统计单词数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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
还有循环!
相关文章推荐
- C++ (重载、覆盖、隐藏)区别
- 二进制搜索方法C++通用执行
- JVM 、JDK(c/c++)源代码下载
- 牛客网(C/C++工程师综合练习卷)
- C++中const顶层指针与底层指针
- C++12.3 (下) 类作用域中名字查找(局部和全局)
- C++杂记
- C++ 关于声明,定义,类的定义,头文件作用,防止头文件在同一个编译单元重复引用,不具名空间
- C++细节8
- C++细节8
- 图的存储和遍历C++实现
- 第十四周项目4-1:处理C++源代码的程序-查找main()函数
- C++的四种强制转换
- C语言将数据复制到粘贴板
- 【C++】前记
- C++指针数组、数组指针、数组名及二维数组技巧汇总
- [转]C++ string的trim, split方法
- C++细节7
- C++细节7
- c++ 从标注输入流读取行