栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

查找字符串中的子串-C版

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找字符串中的子串-C版

问题:用C语言实现传入两个字符串,找到子串在父串的第一次出现的位置。

分析:在C语言中没有字符串这一基本类型,字符串是用字符数组实现的。所以要想找到子串的位置,应该是两个字符串中对每一个字符进行依次比较,直到子串在父串中的每个字符都一一对应。

逻辑:因为要从父串的每一个字符与子串的每一个字符相比较,最外层用一个for循环,用于控制最大比较次数,里层用一个for循环控制子串的每一个字符与父串一一比较,相同就直接跳过,不同就直接跳出,二层的循环结束后,判断最后比较后的长度是否与子串相同,相同就表示都一一对应然后返回父串第一个比较字符的位置,如果内外层循环都没符合条件那就是找不到子串,最后返回-1。

下面是具体实现代码:

#include 
#include 



int find(char parents[], char son[])
{
	//最终返回子串第一次所在的索引位置

	int len1 = strlen(parents);
	int len2 = strlen(son);

	for (int i = 0; i < len1; i++)//最多进行len1次比较
	{
		int j,k = i;
		for (j = 0; j < len2; j++)
		{
			//子串一直比较到结尾如果都符合就返回比较第一次的值
			if (parents[k++] == son[j])
			{
				continue;
			}else{
				break;
			}
		}
		if (j == len2) return i;
	}

	return -1;//找不到就返回 - 1
}

int main() {
	
	char a[] = "0123456789";
	char b[] = "345";
	printf("%dn", find(a, b));

	char c[] = "abc abc cad abc";
	char d[] = "cad";
	printf("%dn", find(c, d));

	return 0;
}

有错误的地方还请多多指教!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号