Description
一般的文字編輯器都有尋找單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。
現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全符合,即給定單詞必須與文章中的某一獨立單詞在不區分大小寫情況下完全相同(參見範例1),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見範例2)。 Input
多組輸入,至EOF結束。
每組2 行。
第 1 行為一個字串,其中只含字母,表示給定單詞;
第 2 行為一個字串,其中只可能包含字母和空格,表示給定的文章。文章字元最多100000個字元 Output
每組只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從0開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1。 Sample Input To to be or not to be is a question to Did the Ottoman Empire lose its power at that time Sample Output
2 0
-1
思路:
一開始思路歪了。用了掃描法。結果被空格和第一個字元和最後一個字元的特殊情況討論暈了。
後來問了馬中行。告訴我要用空格分割單詞。一個單詞一個單詞找。然後 我還是用了強化版掃描法2333.掃描空格嘛。
坑比較多。慢慢填。
注意統一大小寫。
代碼:
#include <stdio.h>#include <string.h>int main(){ char a[1100], b[1000001]; while(gets(a)!=NULL) { gets(b); strcat(a," "); strcat(b," ");//在ab後各加一個" ",減小配對的難度 int i, s, n=0, l, j, ss=0, k, rec; for (i = 0; a[i] != '\0'; i++) { if (a[i] >= 'a') a[i] -= 'a' - 'A'; } for (i = 0; b[i] != '\0'; i++) { if (b[i] >= 'a') b[i] -= 'a' - 'A'; } //統一ab的大小寫 for (i = 0; b[i] != '\0'; i++) { if (b[i] == ' ') { s=1; for (j = n,k = 0; j <= i, a[k] != '\0'; j++, k++) { if(b[j] == a[k]) { s*=1;//用s來記錄各個位能否對應,如果結果是1就正確,一位不對s就變成0 } else { s*=0; } } if (s == 1) { ss++; //如果每次都對就增加符合的次數 } if (ss == 1 && s==1) { rec = n; //記錄第一次符合的位元 } n=i; n++; } } if (ss == 0) { ss = -1; printf("%d\n", ss); } else if (ss >= 1) { printf("%d %d\n", ss, rec); } } return 0;}