统计单词数
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章
中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入输出格式
输入格式:
输入文件名为stat.in ,2 行。
第1 行为一个字符串,其中只含字母,表示给定单词;
第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式:
输出文件名为stat.out 。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。
输入输出样例
说明
数据范围
1≤ 单词长度≤10。
1≤ 文章长度≤1,000,000。
noip2011普及组第2题
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 void convert(string &p) 6 { 7 int i=0; 8 while(p[i]!='\0') 9 { 10 if(p[i]>'A' && p[i]<'Z') //把字母都转换成小写的 11 p[i]+=32; 12 i++; 13 } 14 } 15 16 int main() 17 { 18 string key,data; 19 int flag=0,demo=-1; 20 getline(cin,key); 21 key.erase(key.size()-1); //敲黑板,划重点,消除key最后的'\n' 22 getline(cin,data); 23 convert(key); 24 convert(data); 25 int i=0,j=0; 26 while(data[i]!='\0') 27 { 28 if(flag==0) 29 demo=i; //标记目标单词第一次出现的位置 30 while(data[i]==key[j]) 31 { 32 if(key[j+1]=='\0' && (data[i+1]==' ' || data[i+1]=='\0')) 33 { 34 flag++; 35 break; 36 } 37 else 38 { 39 j++; 40 i++; 41 } 42 } 43 j=0; 44 while(data[i++]!=' '&&data[i]!='\0'){} //找到下一个单词再进行循环 45 } 46 if(flag!=0) 47 cout << flag <<" "<< demo; 48 else 49 cout<<-1; 50 return 0; 51 }

浙公网安备 33010602011771号