欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

运行截图

代码截图
C语言查找字符串

运行截图
C语言查找字符串