C语言 查找字符串子串 返回位置

cyang Lv6

主要的思路就是,不断的从母串 str1 中取出和子串长度相等的临时子串 temp_str,与子串 str2 进行比较。没有找到子串,返回 -1;成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <string.h>

char temp_str[30]; // 临时子串


void ReadStrUnit(char * str,char *temp_str,int idx,int len) // 从母串中获取与子串长度相等的临时子串
{
int index = 0;
for(index; index < len; index++)
{
temp_str[index] = str[idx+index];
}
temp_str[index] = '\0';
}

int GetSubStrPos(char *str1,char *str2)
{
int idx = 0;
int len1 = strlen(str1);
int len2 = strlen(str2);

if( len1 < len2)
{
printf("error 1 \n"); // 子串比母串长
return -1;
}

while(1)
{
ReadStrUnit(str1,temp_str,idx,len2); // 不断获取的从 母串的 idx 位置处更新临时子串
if(strcmp(str2,temp_str)==0)break; // 若临时子串和子串一致,结束循环
idx++; // 改变从母串中取临时子串的位置
if(idx>=len1)return -1; // 若 idx 已经超出母串长度,说明母串不包含该子串
}

return idx; // 返回子串第一个字符在母串中的位置
}

int main()
{
char *str1 = "abcdefghijk";
char *str2 = "def";
int i = 0;
i = GetSubStrPos(str1,str2);
if( i<0 )
{
printf("not found\n");
}
else
{
printf("i = %d\n",i);
}

return 0;
}

原文链接:本人CSDN博客

  • 标题: C语言 查找字符串子串 返回位置
  • 作者: cyang
  • 创建于 : 2017-04-12 19:12:43
  • 更新于 : 2020-02-19 21:32:54
  • 链接: https://blog.cyang.tech/2017/04/12/C语言 查找字符串子串 返回位置/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
C语言 查找字符串子串 返回位置