C语言查找字符串

来源:互联网 发布:fifo算法例题 编辑:程序博客网 时间:2024/05/16 06:56

简述

使用c语言实现字符串查找子串,返回第一个子串出现的位置。

环境

ubuntu16.04 LTS
GCC编译器

代码

#include<stdio.h>#define N 100int 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开始)

运行截图

代码截图
这里写图片描述

运行截图
这里写图片描述

原创粉丝点击