字符串中查找子串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串中查找子串相关的知识,希望对你有一定的参考价值。

使用C语言编写程序:

1、在字符串中查找一个指定的字符第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL

具体实现如下:

char* strchr(char const *str, int ch)
{
	char* st = (char*)str;
	while (st)
	{
		if (*st == ch)
			return st;
		st++;
	}
	return NULL;
}

2、在字符串中查找一个指定的字符串第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL

具体实现如下:

char* strstr(char const *s1, char const *s2)
{
	char* str = (char*)s1;
	char* ch = (char*)s2;
	char* cur = str;//设置cur标志位
	while (cur)
	{
		char* p1 = cur;
		char* p2 = ch;
		while (p1 && p2 && *p1 == *p2)//注意此处用*p1和*p2比较两个是否相同
		{
			p1++;
			p2++;
		}
		if (*p2 == ‘\0‘)//注意此处不能用p2==NULL
			return cur;
		else
			cur++;
	}
	return NULL;
}

测试如下:

void test()
{
	char const* str = "abaabcde";
	int ch = ‘b‘;//strchr查找字符
	char* arr = "abc";//strstr查找字符串
	printf("%p----%p\n", str + 1, strchr(str, ch));//找到ch返回ch指针,否则为NULL
	printf("%p----%p\n", str + 3, strstr(str, arr));//找到arr返回子串指针,否则为NULL
}

小知识:编写程序判断你的电脑是小端存储还是大端存储。

    大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

    小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

void test()
{
	int num = 3;//Ox000003
	char* p = (char*)#
	for (int i = 0; i < 4; i++)
	{
		printf("%d ", *p);
		p++;
	}
	if (3 == *(char*)&num)
	{
		printf("小端存储!\n");
	}
	else
	{
		printf("大端存储!\n");
	}
}

本文出自 “Materfer” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1758613

以上是关于字符串中查找子串的主要内容,如果未能解决你的问题,请参考以下文章

怎么查找一个string 字符串中的子字符串出现的次数和位置

解题报告—查找子串

字符串中查找子串

每日一题查找两个字符串中的最长公共子串

每日一题查找两个字符串中的最长公共子串

查找子串