字符串中查找子串

使用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");
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值