如何用指针操作实现字符串的截取获得后半字符串的内容?

leihelin5201314 2010-10-18 09:54:42
RT
例如:得到的fname[100]=“abce1234efg”,我知道第一部分的长度“abcd”是4,
那么如何用指针指向数字1来获得1234?
当截取到1234之后,指针指向了字母e,开始获得最后一部分?
1234和efg只是我拿来作为例子的,其实这两部分的长度是不确定的,能告诉下详细步骤吗?
我对指针很生疏,但是同伴要求很急,谢谢!
...全文
680 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
li3325885203 2010-11-25
  • 打赏
  • 举报
回复
我只是一个编程小白 我是来看看经验的!
漫步者、 2010-10-18
  • 打赏
  • 举报
回复
让我做我就用了KMP方法做了,LZ,叙述题目都没说清楚,你用KMP方法做吧! 很容易的!
乐CC 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leihelin5201314 的回复:]
引用 13 楼 luciferisnotsatan 的回复:

lz到底想要干什么?没看明白。
你是要在字符串 abcd1234efg里查找是否有作为参数的字符串1234?然后返回1234之后的字符串?
是的话就先用strstr查 p = strstr("abcd1234efg","1234") p指向查找到的该字符串的第一个字符,然后再后移查找字符串的长度就可以了 P+strlen("1……
[/Quote]
总算是明白楼主的意思了,可是我觉得没办法解决了,就算解决,也是很复杂的,有这么几个难点:
1:你的前8个字节是确定长度的,这个好说,但是长度是不确定的,如果你的长度是9999,那你要定义多大的数组存储啊?
2,你的函数名是不确定的,而且完全可以是fname1,fname12,fname123...都是合法的,函数名完全可以包含数字以及后面的参数一起作为一个新的函数名,那我怎么确定这个函数名呢?如果这个确定不了,那后面就无从下手了;
3,接2,即使你通过map文件查找函数名合法性(函数名在编译完成后被替换为地址值,可执行文件中不再保存,这个知道吧,所以只能通过外部文件map来记录和索引函数名用于查找),那如果有冲突(即,有两个函数fname(int,char*)和fname123(char*))发生,你怎么确定调用哪一个?
4,回到参数问题,如果有参数象char*类型,你怎么确定它的结束位置?象abc123,到底是应该解释为(char*)还是(char*,int)?
综上所述,建议楼主还是使用分隔符,即使是在DOS命令中,参数也要使用空格间隔的
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
貌似有点乱,这个帖子先结了吧,另开个
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leihelin5201314 的回复:]

引用 13 楼 luciferisnotsatan 的回复:

lz到底想要干什么?没看明白。
你是要在字符串 abcd1234efg里查找是否有作为参数的字符串1234?然后返回1234之后的字符串?
是的话就先用strstr查 p = strstr("abcd1234efg","1234") p指向查找到的该字符串的第一个字符,然后再后移查找字符串的长度就可以了 P+strlen("……
[/Quote]
只是说这两个长度数字各占4位,我也不清除各4位是不是这么写···
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luciferisnotsatan 的回复:]

lz到底想要干什么?没看明白。
你是要在字符串 abcd1234efg里查找是否有作为参数的字符串1234?然后返回1234之后的字符串?
是的话就先用strstr查 p = strstr("abcd1234efg","1234") p指向查找到的该字符串的第一个字符,然后再后移查找字符串的长度就可以了 P+strlen("1234")
[/Quote]
我写个现在真实用的吧
接受到的字符串str是“01000080fname123abc”
其中前4位0100指的是总的str的长度,指针指向头结点0来判断如果接收到的实际长度不是0100(4位,长度是100),即数据包发生错误,那么返回error;
紧接着4位0080指的是“123abc”两部分参数的长度;
“fname”是我需要调用的函数名,长度我知道的,对比调用函数就可以了,123和abc是调用的函数的参数,不论长度100不对还是函数名不对还是参数不对,立即返回error。
我现在就是做这个判断系统的,
哪位指导下该怎么写,其中的参数不仅仅是数字和字母这么简单的,可能混合着,
不知道我说的大家明不明白?
luciferisnotsatan 2010-10-18
  • 打赏
  • 举报
回复
lz到底想要干什么?没看明白。
你是要在字符串 abcd1234efg里查找是否有作为参数的字符串1234?然后返回1234之后的字符串?
是的话就先用strstr查 p = strstr("abcd1234efg","1234") p指向查找到的该字符串的第一个字符,然后再后移查找字符串的长度就可以了 P+strlen("1234")
FengRider 2010-10-18
  • 打赏
  • 举报
回复
汗,出了点小错,9的ASCII码是57,上面做条件判断时,是*p<= 57 而不是*p<57
FengRider 2010-10-18
  • 打赏
  • 举报
回复
如果说中间部分是纯数字,第三部分是是数字的话,你将数字保存为一个字符串,第三部分另外存成一个字符串不就可以了。
char buf1[100] = {0};
char buf2[100] = {0};
char *p = &fname[4];从第4个位置开始计数
int i=0, j=0;
while(*p)
{
if(*p >= 48 && *p< 57) //如果是数字部分则保存到buf1
{
buf1[i++] = *p;
}
else //非数字部分保存到buf2
{
buf2[j++] = *p;
}
p++;
}
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sfd1234 的回复:]

长度未知、参数特性未知,这个没法整了!
[/Quote]
如果后半部分只是一个参数,第一部分长度是20,后半部分长度是80,那么改如何表示后半部分的内容来调用?
sfd1234 2010-10-18
  • 打赏
  • 举报
回复
长度未知、参数特性未知,这个没法整了!
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 try325 的回复:]

引用 5 楼 leihelin5201314 的回复:

引用 3 楼 try325 的回复:

问题1,见1楼回答
问题2,当截取到1234之后,指针指向是4,指针再加1才指向e
问题3,根据需要截取字符串的特征,对指针内容进行判断

现在就是不知道如何获得到1234部分的内容···长度未知···

那总有截的依据吧,截什么,如果是将字母串和数字串截开,比较ascii值就行……
[/Quote]
因为后面两部分都是作为调用函数的参数的
参数不确定,不好搞··
假如只有一个参数,后半部分如何表示?
try325 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 leihelin5201314 的回复:]

引用 3 楼 try325 的回复:

问题1,见1楼回答
问题2,当截取到1234之后,指针指向是4,指针再加1才指向e
问题3,根据需要截取字符串的特征,对指针内容进行判断

现在就是不知道如何获得到1234部分的内容···长度未知···
[/Quote]
那总有截的依据吧,截什么,如果是将字母串和数字串截开,比较ascii值就行
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 eclipse_2 的回复:]

strstr
strrchr
[/Quote]
能详细点吗?谢谢
leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 try325 的回复:]

问题1,见1楼回答
问题2,当截取到1234之后,指针指向是4,指针再加1才指向e
问题3,根据需要截取字符串的特征,对指针内容进行判断
[/Quote]
现在就是不知道如何获得到1234部分的内容···长度未知···
小魔菇 2010-10-18
  • 打赏
  • 举报
回复
strstr
strrchr
try325 2010-10-18
  • 打赏
  • 举报
回复
问题1,见1楼回答
问题2,当截取到1234之后,指针指向是4,指针再加1才指向e
问题3,根据需要截取字符串的特征,对指针内容进行判断


leihelin5201314 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

数组下标就是指针,如果你知道下标是什么,转成用指针就可以了
fname[4] 等于 *(fname + 4)
[/Quote]
第一部分我知道,但是第二部分和第三部分长度未知,
*(fname+4)指向的是数字1,但是长度未知,怎么获得第二部分的内容···
第三部分呢
luciferisnotsatan 2010-10-18
  • 打赏
  • 举报
回复
数组下标就是指针,如果你知道下标是什么,转成用指针就可以了
fname[4] 等于 *(fname + 4)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧