请编写一个查找子字符串的程序,并统计子字符串出现的次数。 **输入格式要求:"%s" 提示信息:"请输入主串:" "请输入要查找的串:" **输出格式要求:"%s,%s:" "子串出现的次数:%d\n" "子串不在主串中\n" 程序运行示例1如下: 请输入主串:Hello,world! 请输入要查找的串:l Hello,world!,l:子串出现的次数:3 程序运行示例2如下: 请输入主串:Hello,world! 请输入要查找的串:abc Hello,world!,abc:子串不在主串中
//1.3查找子字符串(查找元素最终版)
//使用:返回值为出现了多少次,返回-1则没找到.
int find_str(char* str1, char* str2,int *arr_pos)
{
str1[strlen(str1)] = '\0';
str2[strlen(str2)] = '\0';//这两个步骤是为了把\n去掉,回车也算字符
int flag=0;
char first = str2[0];
int A = find_e_plus(str1, first,arr_pos);
if (A == -1)
{
//printf("子串不在主串中");
return -1;
}
else
{
for (int k = 0, j = arr_pos[k];k<A; k++)//数组中下标一个个开始算
{
int m = 0;
for (int i = j; i < strlen(str2)+j; i++)//这个相当于找到头了,判断后面相等不相等,循环结束代表判断
{
if (str1[i] == str2[m])//会判断strlen(str2)次
{
m++;
flag++;//所以如果都能对上,那么应当是strlen(str2)次
}
else//如果没对上,那么直接跳出当前的判断.
break;
}
}
if (flag == 0)//没找到
{
return -1;
}
else
return flag/strlen(str2);//看看有多少个这样字符串;
}
}
上篇文章分享了几个查找单个字符的函数:
如下:
// 1.1在字符串中查找某一元素,并且记录下标.
/*使用:返回值为查找元素的下标(不是第几个哦)(返回最近的一个), 如果没有返回 -1*/
int find_e(char* str, char e)
{
int i = 0;//参与循环
int pos = -1;//记录下标
for ( i = 0; str[i]!='\0'; i++)
{
if (str[i] == e)
{
pos = i;
//printf("查抄的字符%c在字符串中的第%d个\n", e, pos + 1);
return pos;
}
}
if (str[i] == '\0')//也可以查到'\0'
{
pos = i-1;
}
if (pos == -1)
return pos;
}
//1.2在字符串中查找元素,并且返回位置.
/*使用:用数组储存, 返回 - 1就是没有查到*///记得将数组格式化
int find_e_plus(char* str, char e, int* arr_pos)
{
int j = 0;
int flag = -1;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == e)
{
arr_pos[j] = i;
j++;
flag = 1;
}
}
if (flag == -1)
return -1;
else
return j;//返回有多少个这样的字符
}
在第三个函数中,我也运用了第二个函数来简化代码.对于题目的解答如下:
int main()
{
char str1[80];
char str2[80];
int arr_pos[80] = {0};
//int A=find_e_plus(str1, 'b', arr_pos);
//printf_arr(arr_pos, A);
printf("请输入主串:");
scanf("%s", str1);
str1[strlen(str1)] = '\0';
printf("请输入要查找的串:");
scanf("%s", str2);
str2[strlen(str2)] = '\0';
int end = find_str(str1, str2, arr_pos);
if (end == -1)
{
printf("%s,%s:", str1, str2);
printf("子串不在主串中\n");
}
else
{
printf("%s,%s:", str1, str2);
printf("子串出现的次数:%d\n", end);
}
return 0;
}
借助函数我们可以最大程度的简化代码.这道题如果不用函数解答,大家可以尝试一下,对比来看.
这个查找字符串字串的函数应当很常用,所以我将它单独拿出来分享,以后遇到相同的问题,可以用这个函数直接解答.对于函数的使用我在代码中都有注释标注.如有错误,希望大家评论区指正.