C语言查找字符串

简述

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

环境

ubuntu16.04 LTS
GCC编译器

代码


#include
#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开始)

运行截图

代码截图
C语言查找字符串_第1张图片

运行截图
C语言查找字符串_第2张图片

你可能感兴趣的:(c语言)