生活随笔
收集整理的這篇文章主要介紹了
1750: 统计单词数(某个单词出现次数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
zcmu:
1750: 統計單詞數
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 379 Solved: 74
[Submit][Status][Web Board]
Description
一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中的次數。
現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即單詞必須與文章中某一獨立殘次在不區分大小寫的情況下完全相同(參見樣例1),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2)。
Input
輸入文件共2行。
第1行為一個字符串,其中只包含字母,表示給定單詞;
第2行為一個字符串,其中只可能包含字母和空格,表示給定的文章。
Output
只有1行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從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
HINT
1<=單詞長度<=10。
1<=文章長度<=10,000,000。
NOIP2011 普及組 stat
Source
NOIP2011
AC_code:
#include <stdio.h>#include <string.h>char a[10000005],b[15];void CharLower(char* a,int s,int e){for(int i = s; i < e; i++){if(a[i]>='A'&&a[i]<='Z')a[i] = a[i]+32;}}int main(){memset(b,'\0',sizeof(b));while(gets(b+1)){b[0] = ' ';int lenth_b = strlen(b);b[lenth_b] = ' ';memset(a,'\0',sizeof(a));gets(a+1);a[0] = ' ';int lenth_a = strlen(a);a[lenth_a] = ' ';CharLower(b,1,lenth_b);CharLower(a,1,lenth_a);int flag = 1,pos,sum = 0;char *p = a,*q = b,*start = NULL;while(start=strstr(p,q)){sum++;if(flag){pos = start - a;flag = 0;}p = start+1;}if(sum)printf("%d %d\n",sum,pos);elseprintf("-1\n");memset(b,'\0',sizeof(b)); }return 0;}
/*
總結:
對于獨立殘次的單詞匹配,可以對子串和母串前后各加一個空格進行匹配。
如果前后不加空格,strstr滿足不了這個條件:單詞必須與文章中某一獨立殘次在不區分大小寫的情況下完全相同
就是下面這個圖的結果:
*/
下面是我第一次做的,用strncasecmp不知道為什么是Wrong:
(想知道原因ing)
code:
#include <stdio.h>
#include <string.h>
char a[10000005],b[15],c[15];
int main()
{memset(b,'\0',sizeof(b));while(gets(b)){memset(a,'\0',sizeof(a));gets(a);int sum = 0,k,lenth_b = strlen(b),pos,flag = 1;for(int i = 0; a[i]!='\0'; i+=k){k = 0;memset(c,'\0',sizeof(c));for(int j = i; a[j]!=' '&&a[j]!='\0'; j++){c[k++] = a[j];}if(k==lenth_b&&strncasecmp(b,c,lenth_b)==0){sum++;if(flag){pos = i;flag = 0;}}k++;}if(sum)printf("%d %d\n",sum,pos);elseprintf("-1\n");memset(b,'\0',sizeof(b));}return 0;
}
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的1750: 统计单词数(某个单词出现次数)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。