题目描述 Description
题目描述
编程实现查找单词的功能,快速找到文章中单词所在的位置,以及统计出指定单词出现的次数。
具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入样例#1: To to be or not to be is a question 输出样例#1: 2 0
输入样例#2: to Did the Ottoman Empire lose its power at that time 输出样例#2: -1
1≤ 单词长度≤20。
1≤ 文章长度≤1,0000
输入描述 Input Description
输入格式:
包含2 行。
第1 行为一个字符串,其中只含字母,表示给定单词;
第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出描述 Output Description
输出格式:
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。
样例输入 Sample Input
not
to be or Not to be is a question
样例输出 Sample Output
1 3
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 char a[25],b[10005]; 8 int main(){ 9 gets(a); 10 gets(b); 11 12 for(int i=0;i<strlen(b);i++) 13 { 14 if(b[i]>='a' && b[i]<='z') 15 b[i]=b[i]-32; 16 } 17 for(int i=0;i<strlen(a);i++) 18 { 19 if(a[i]>='a' && a[i]<='z') 20 a[i]=a[i]-32; 21 } 22 23 //sum 出现次数,k 出现位置,space 统计空格出现次数,确定单词的位置 24 int sum=0,k=0,space=0; 25 int j; 26 for(int i=0;i<strlen(b);i++) 27 { 28 if(b[i]==' ') 29 space++; 30 if(a[0]==b[i]) 31 { 32 for(j=0;j<strlen(a);j++) 33 { 34 if(a[j]!=b[i+j]) 35 break; 36 } 37 if((j==strlen(a) && b[i-1]==' '&&(b[i+j]==' '||j+i==strlen(b))) || ((j==strlen(a) && b[i+j]==' '&&i==0 ))) 38 { 39 sum++; 40 if(sum==1) 41 { 42 k=space; 43 } 44 } 45 } 46 } 47 48 if(sum>0) 49 cout<<sum<<" "<<k; 50 else 51 cout<<-1; 52 return 0; 53 }