洛谷 - 统计单词数
P1308 统计单词数
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章
中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入输出格式
输入格式:
共22行。
第11行为一个字符串,其中只含字母,表示给定单词;
第22行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式:
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从00 开始);如果单词在文章中没有出现,则直接输出一个整数-1−1。
输入输出样例
输入样例#2: 复制
to Did the Ottoman Empire lose its power at that time
输出样例#2: 复制
-1
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 string w; //单词 7 string t; //文章 8 9 getline(cin, w); 10 getline(cin, t); 11 12 for(int i = 0; i < w.length(); i++) //将单词和文章中所有单词转换为小写字母 13 { 14 w[i] = tolower(w[i]); 15 } 16 17 for(int i = 0; i < t.length(); i++) 18 { 19 t[i] = tolower(t[i]); 20 } 21 22 int sum = 0; //记录出现的总次数 23 int pos; //记录单词在文章第一次出现的位置 24 int i, j; //循环变量 25 26 // w: to 27 // t: wto hello to you tom 28 29 for(i = 0; i <= t.size() - w.size(); i++) //循环t串的0~(t-w) 30 { 31 for(j = 0; j < w.size(); ++j) //t的字符,分别对其对其后面的w的长度位做比较 32 { 33 if(t[i + j] != w[j]) //如果在w的长度之内有不相等的,直接跳出循环 34 { 35 break; 36 } 37 38 if(i > 0 && t[i-1] != ' ') //不在开头的时候,如果它前面不是空格,就表示它不是单独的单词 39 { 40 break; 41 } 42 } 43 44 if(j == w.size() && (t[i + j] == ' ' || i+j == t.size())) //将w匹配完,并且下一个就是空格,或者i+j刚好到了t的最后(最后的单词没有空格) 45 { 46 sum++; 47 48 if(sum == 1) //记住第一次出现的位置 49 { 50 pos = i; 51 } 52 } 53 54 } 55 56 if(sum == 0) 57 { 58 cout << -1; 59 } 60 else 61 { 62 cout << sum << " " << pos; 63 } 64 65 return 0; 66 }