C语言查找字符串
程序员文章站
2022-03-22 12:45:45
...
简述
使用c语言实现字符串查找子串,返回第一个子串出现的位置。
环境
ubuntu16.04 LTS
GCC编译器
代码
#include<stdio.h>
#define N 100
int find_str(char* str1,char* str2)
{
int i,j,flag=-1;
for(i=0,j=0;str1[i]!=NULL;i++)
{
while(str1[i]==str2[j]&&str1[i]&&str2[j])
{
i++;
j++;
if(str2[j]==NULL)
{
flag=i-j;
return flag;
}
}
j=0;
}
return flag;
}
int main()
{
int flag;
char str1[N],str2[N];
printf("请输入源字符串:\n");
scanf("%s",str1);
printf("请输入查找字符串:\n");
scanf("%s",str2);
flag=find_str(str1,str2);
if(flag!=-1)
{
printf("已找到!位置:%d\n",flag);
}
else
{
printf("未找到!\n");
}
return 0;
}
解析
函数原型
int find_str(char* str1,char* str2);
- str1为char类型的指针,是被查找的字符串。
- str2为char类型的指针,是需要查找的字符串。
- 返回值int类型。
首先判断str1的第一个元素是否与str2的第一个元素相同?
如果相同,则str1与str2的下标同时增加,指向下一个元素,继续判断下一个元素是否相同,如果不同则跳出并且j恢复初值0,如若相同,继续下一个,直到某一个元素为空不存在,str1[i]先为空,说明已经查询到文件尾,但是未找到!如果str2[j]先为空,则说明已经完全匹配,j为str2长度,i为str1的查找子串尾下标,所以i-j的值为str1中子串首次出现的首位置。
如果第一个元素不相同,则i++,str1的下一个元素与str2的首元素相比,以此类推。
注意flag初值-1,表示未找到返回-1(若找到,下标从0开始)
运行截图
代码截图
运行截图
上一篇: 《高性能javascript》随笔
下一篇: 查找最长子串的长度(不重复字符)