作者ericerix (我的帅,在於脸)
看板C_and_CPP
标题[问题] 利用pointer取substring
时间Tue Feb 23 12:17:20 2021
开发平台(Platform): (Ex: Win10, Linux, ...)
Win 10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Leetcode
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
如何使用pointer去取substring
喂入的资料(Input):
无
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://pastebin.com/viUgV0FU
补充说明(Supplement):
想达成的目的是:
有一个变数为 char *b="1234567";
想利用pointer去取到"4567"这样,
虽然pointer的观念不是很熟悉,
但大概知道,array的用法就是起头的pointer加上bias,
一开始是想说,把char *a这个变数指到b[3]的位址,
然後直接printf出这个a,但ㄧ直出错
找了找网路上的方法,都是用一格一格去复制到a的,
但我觉得这样效率不好,因为我想做的题目若这样做的话,时间复杂度会提高很多,
如果直接用pointer去指,可能会快速很多。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.23.154.216 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1614053845.A.A52.html
1F:→ nh60211as: 你 &b[3] = b; 在干吗 02/23 12:20
那个程式码有些地方是乱打的XDD 不好意思没有删乾净,
我刚刚试了一下,这样是可以实作出我想做的:
const char b[] = "1234567";
const char *a;
a = &b[3];
printf("%s",a);
看来b的宣告是个关键。有人可以跟我说为什麽吗QQ 我C苦手
※ 编辑: ericerix (211.23.154.216 台湾), 02/23/2021 12:21:55
3F:→ nh60211as: 都没问题馁,有完整程式码吗 02/23 12:25
4F:→ james732: 个人建议先写出正确的程式,效能考量再针对瓶颈最佳化 02/23 13:27
5F:推 KaryuuIssen: 感觉你好像解决了? 没看懂你想问什麽 02/23 15:41
6F:推 pinefruit: 用你试出的方法 a = &b[3],或是 a = b + 3 都可以。 02/23 16:02
7F:→ pinefruit: 另外,b 要宣告成阵列或指标对这问题并没有影响。 02/23 16:03
8F:推 ctrlbreak: 我觉得他是不知道这样写printf("%s",b[3]);为什麽会错 02/23 18:19
9F:推 peterbrucele: 与楼上同感 似乎没看清楚data type? 02/24 00:49
10F:推 TeaEEE: %c 02/24 08:45
已经解决了,昨天莫名其妙都搞不出解答
完整一点:
char *s = "1234567";
printf("%s",s); // "1234567"
s = &s[3];
printf("%s",s); // "4567"
是可以解决的
谢谢大家!
※ 编辑: ericerix (140.115.50.48 台湾), 02/24/2021 09:29:08
11F:→ ctrlbreak: s = &s[3]; // 有点恐怖 02/24 12:17
怎麽说呢? 不过我似乎把阵列当link list使用了..
※ 编辑: ericerix (140.115.53.191 台湾), 02/24/2021 13:34:26
12F:推 annheilong: 应该写 s = s+3; 02/24 16:59
13F:推 philip80220: char *s="1234567"; <-不要这样宣告啊~看一下十三诫 02/24 23:46
14F:→ philip80220: 的第四点 02/24 23:46