字符串查找
Time Limit:1000MS Memory Limit:65536K
Total Submit:73 Accepted:24
Description
请编制程序实现下面的功能:统计一个子字符串在另一个字符串中出现的次数。
Input
有多组数据,每组两行,两行输入的都是字符串。 字符串中字符没有限制,如第一行第一个字符是#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表第二个字符串在第一个字符串中出现的次数。
Sample Input
asd asasdfg asd as zx67 asd mklo as #
Sample Output
6
Hint
输入数据的格式是:每行的宽度均小于80个字符。
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include
<
iostream
>
using namespace std;
int main()
{
char a[ 1001 ],b[ 1001 ];
int i,j;
while (gets(a) != NULL)
{
if (a[ 0 ] == ' # ' ) break ;
gets(b);
int L1 = strlen(a);
int L2 = strlen(b);
int sign = 0 , flag = 0 ;
i = sign,j = 0 ;
while (i < L1 && j < L2)
{
if (a[i] == b[j])
{
i ++ ;
j ++ ;
if (j == L2)
{
flag ++ ;
j = 0 ;
i = sign + 1 ;
sign = i;
}
}
else
{
j = 0 ;
sign ++ ;
i = sign;
}
}
cout << flag << endl;
}
return 0 ;
}
using namespace std;
int main()
{
char a[ 1001 ],b[ 1001 ];
int i,j;
while (gets(a) != NULL)
{
if (a[ 0 ] == ' # ' ) break ;
gets(b);
int L1 = strlen(a);
int L2 = strlen(b);
int sign = 0 , flag = 0 ;
i = sign,j = 0 ;
while (i < L1 && j < L2)
{
if (a[i] == b[j])
{
i ++ ;
j ++ ;
if (j == L2)
{
flag ++ ;
j = 0 ;
i = sign + 1 ;
sign = i;
}
}
else
{
j = 0 ;
sign ++ ;
i = sign;
}
}
cout << flag << endl;
}
return 0 ;
}