輸入格式不對和輸入緩衝區太小,字串,是以\0為結果,但不一定不含空白符,scanf()的%s只輸入不含空白符的,會在空白符處斷做多個串,測試資料可能是一段文字,很多個單詞長度可以遠越過101位元組
chara[10240],b[10240];//一個串長達10K,足夠了
while(scanf("%s%s",&a,&b)!=EOF)//輸入格式不好
可以試著改為:
while(gets(a)&&gets(b))
多利用一下標準庫函式如strlen()memcmp()算了,我還是寫個完整的吧
///////////////////
#include<stdio.h>
#defineMAXLEN10240
intmain()
{
chara[MAXLEN],b[MAXLEN];
inti,c,len,sublen;
while(gets(a)&&gets(b))//while(scanf("%s%s",&a,&b)!=EOF)
c=0;
len=strlen(a);
sublen=strlen(b);
if(!sublen)continue;//防止子串長度為0
for(i=0;i<len-sublen;i++)
if(memcmp(&a[i],b,sublen)==0)
c++;
i+=sublen-1;//如果"aaaa"可以當做不止兩個"aa"則不要當前一行
}
printf("%d\n",c);
return0;
輸入格式不對和輸入緩衝區太小,字串,是以\0為結果,但不一定不含空白符,scanf()的%s只輸入不含空白符的,會在空白符處斷做多個串,測試資料可能是一段文字,很多個單詞長度可以遠越過101位元組
chara[10240],b[10240];//一個串長達10K,足夠了
while(scanf("%s%s",&a,&b)!=EOF)//輸入格式不好
可以試著改為:
while(gets(a)&&gets(b))
多利用一下標準庫函式如strlen()memcmp()算了,我還是寫個完整的吧
///////////////////
#include<stdio.h>
#defineMAXLEN10240
intmain()
{
chara[MAXLEN],b[MAXLEN];
inti,c,len,sublen;
while(gets(a)&&gets(b))//while(scanf("%s%s",&a,&b)!=EOF)
{
c=0;
len=strlen(a);
sublen=strlen(b);
if(!sublen)continue;//防止子串長度為0
for(i=0;i<len-sublen;i++)
{
if(memcmp(&a[i],b,sublen)==0)
{
c++;
i+=sublen-1;//如果"aaaa"可以當做不止兩個"aa"則不要當前一行
}
}
printf("%d\n",c);
}
return0;
}