統計單詞數
時間限制:1 s
內存限制:128MB
【問題描述】
一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位
置,有的還能統計出特定單詞在文章中出現的次數。
現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章
中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,
即給定單詞必須與文章中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例1),
如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2)。
【輸入】
輸入文件名為stat.in,2行。
第1行為一個字符串,其中只含字母,表示給定單詞;
第2行為一個字符串,其中只可能包含字母和空格,表示給定的文章。
【輸出】
輸出文件名為stat.out。
只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,
分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字
母在文章中的位置,位置從0開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1。
輸入輸出樣例1
輸入:
To
to be or not to be is a question
輸出:
2 0
【輸入輸出樣例1說明】
輸出結果表示給定的單詞To在文章中出現兩次,第一次出現的位置為0。
輸入輸出樣例2
輸入:
to
Did the Ottoman Empire lose its power at that time
輸出:
-1
【輸入輸出樣例2說明】
表示給定的單詞to在文章中沒有出現,輸出整數-1。
【數據范圍】
1≤單詞長度≤10。
1≤文章長度≤1,000,000。

1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char s1[100],s2[1000]; 6 int f1; 7 long first=-1,num=0;//first:首次出現的下標。num:總共出現的次數 8 char ch; 9 int i; 10 int index=-1;//表示當前掃描文章的下標 11 12 freopen("stat2.in","r",stdin); 13 freopen("stat2.txt","w",stdout); 14 15 scanf("%s",s1); 16 getchar();//吸收回車符 17 for(i=0;s1[i]!='\0';i++) 18 { 19 if(s1[i]>='A'&&s1[i]<='Z')//若是大寫字母,則變為小寫字母 20 s1[i]=s1[i]+32; 21 } 22 23 f1=0;//尚未開始輸入文章當中的新單詞 24 i=0;//從文章輸入的字符保存在s2數組當中的下標 25 while((ch=getchar())!=EOF) 26 { 27 index++; 28 if(ch==' ') 29 { 30 if(f1==0) { continue; } 31 else 32 { 33 s2[i]='\0'; 34 if(strcmp(s1,s2)==0) 35 { 36 if(first==-1) 37 first=index-strlen(s2); 38 num++; 39 } 40 i=0; 41 f1=0; 42 } 43 } 44 else 45 { 46 f1=1; 47 if(ch>='A'&&ch<='Z') ch=ch+32; 48 s2[i]=ch; 49 i++; 50 } 51 } 52 if(num>0) 53 printf("%d %d\n",num,first); 54 else printf("-1\n"); 55 return 0; 56 }