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

[复制链接]
1534|7
 楼主| zgjzgjkyo 发表于 2019-7-21 10:14 | 显示全部楼层 |阅读模式
请教大家,有没有见过在字符串A查找在字符串B首次出现的位置的函数库?
例如:
char str1[] = "123abcABC789abc";
char str2[] = "abc";

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


比较后应该是得出是:3

我目前找个标准库(主要是string.h)里面并没有这样的函数。

比较接近的算是strstr()。但这个也不对,这个只是返回字符串,并不是返回位置



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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部