作者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/m.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