请教大家,有没有见过在字符串A查找在字符串B出现的位置...

[复制链接]
1076|7
手机看帖
扫描二维码
随时随地手机跟帖
zgjzgjkyo|  楼主 | 2019-7-21 10:14 | 显示全部楼层 |阅读模式
请教大家,有没有见过在字符串A查找在字符串B首次出现的位置的函数库?
例如:
char str1[] = "123abcABC789abc";
char str2[] = "abc";

然后查找str2在str1首次出现的位置。


比较后应该是得出是:3

我目前找个标准库(主要是string.h)里面并没有这样的函数。
新建图像 1.jpg
比较接近的算是strstr()。但这个也不对,这个只是返回字符串,并不是返回位置
QQ截图20190721100953.jpg


我目前想到的笨方法只能用for循环一个一个的对比,然后再拼接位置,但这样实在有点麻烦,也浪费资源。
我想过毕竟我找的只是C标准库,单片机可能会有特别的库(我目前是stm8 for IAR),可能会有自己的库......
因此我想请教一下大家,有没有见过求这种字符串位置的标准库?


使用特权

评论回复

相关帖子

zgjzgjkyo|  楼主 | 2019-7-21 11:03 | 显示全部楼层
想了一下,也不需要逐个比较位置。用上面的函数也可以.......但还是需要补上strlen求解才行.......

使用特权

评论回复
叶春勇| | 2019-7-21 12:14 | 显示全部楼层
zgjzgjkyo 发表于 2019-7-21 11:03
想了一下,也不需要逐个比较位置。用上面的函数也可以.......但还是需要补上strlen求解才行....... ...
char my_strstr(char *s1,char *s2)
{
        char *s=strstr(s1,s2);
        if(s==NULL) return -1;
        else return s-s1;
}

使用特权

评论回复
zgjzgjkyo|  楼主 | 2019-7-21 12:31 | 显示全部楼层

请教一下“s-s1”这个。我查到外面说是地址相减。

假如s1首地址:0x1234500 是这个的话。
s的首地址就会为:0x1234500 + s

这个也是适合于单片机吗?

使用特权

评论回复
Prry| | 2019-7-21 13:37 | 显示全部楼层
用strstr即可,还可以用sscanf

使用特权

评论回复
叶春勇| | 2019-7-21 13:41 | 显示全部楼层
本帖最后由 叶春勇 于 2019-7-21 13:43 编辑
zgjzgjkyo 发表于 2019-7-21 12:31
请教一下“s-s1”这个。我查到外面说是地址相减。

假如s1首地址:0x1234500 是这个的话。

地址相减本质就是整数加减,没问题的。
s=0x1234500+n
s1=0x1234500
s-s1=0x1234500+n-0x1234500=n

使用特权

评论回复
cjseng| | 2019-7-21 14:17 | 显示全部楼层
自己写个函数吧,占用资源还少

使用特权

评论回复
ayb_ice| | 2019-7-22 09:48 | 显示全部楼层
标准C库就有,strstr函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

213

帖子

4

粉丝