方法一:
分析:输入一个字符串进行查找,需要让原字符串遍历所有的字符与要查找的字符串进行一个一个比较,若不同,则下一个重新与查找的字符串进行比较,若相同,则继续让下一个字符与要查找的字符串的下一个比较,若相同则执行同样的操作,直到把要查找的字符串比较完,若不同,则让原字符串的下一个字符重新与要查找的字符串依次比较。原字符串只需遍历到剩余长度小于要查找的字符串的长度就可以了。
代码如下:
#include "stdio.h"
#include "string.h"
int main()
{
char a[100],b[100];
int i,j,k,len1,len2,count=0;
printf("请输入字符串:");
scanf("%s",a);
printf("请输入要查找的字符串:");
scanf("%s",b);
len1 = strlen(a);
len2 = strlen(b);
i = 0;
while(i<=len1-len2) //实现a字符串的遍历,只要遍历到倒数len2-1的位置就行
{
j = i;
k = 0;
while(k<len2 && a[j]==b[k]) // 实现字符串的连续比较
{
j += 1;
k += 1;
}
if(k == len2) //要查找的字符串已找到
{
count += 1;
i += len2-1; //外循环跳过已找到的字符串开始遍历
break;
}
i += 1;
}
printf("%d",count);
}
方法二:这个方法没有方法一巧妙,它让元字符串的每一个字符与要查找的字符串里的每一个字符一一比较,如果不相同,则让下一个再与要查找的字符串一一比较,如果相同,则让原字符串的下一个字符与要查找的字符串的下一个字符比较,不再重新与开头的字符比较,如果不同,则让原字符串的下一个字符重新与要查找的字符串比较。如果相同,则让原字符串的下一个与要查找的字符串的下一个比较,依次类推,直到要查找的字符串完全找到就结束,然后再让原字符串的下一个字符继续重新与要查找的字符串开始比较,直到遍历完所有原字符串就结束。
代码如下:
#include "stdio.h"
#include "string.h"
void main()
{
char a[100];
char b[100];
int i,len1,len2,j,count;
printf("请输入字符串:");
scanf("%s",a);
printf("请输入查找的字符串:");
scanf("%s",b);
i = 0;
j = 0;
count = 0;
len1 = strlen(a);
len2 = strlen(b);
while(i<=len1) //实现a字符串的遍历,只要遍历到倒数len2-1的位置就行
{
while(j<len2) //实现每个字符的依次比较
{
if (b[j] != a[i])
{
if (j > 0) //j>0,代表前j次的字符相同
{
j = 0;
i -= 1;
}
else //前一次的比较也是不同
j = 0;
break;
}
else if (b[j] == a[i]) //字符相同
{
j += 1;
if (j == len2 ) //要查找的字符串已找到
{
count += 1;
j = 0;
break;
}
break;
}
}
i += 1;
}
printf("字符串%s出现的次数是:%d\n",b,count);
}