[問題] 字串1分為2

看板C_and_CPP作者時間6年前 (2017/09/05 19:52), 6年前編輯推噓11(11020)
留言31則, 17人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) LINUX 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 問題(Question): 用第一個空格為分隔點,將一段含有空格的字串1分為2 餵入的資料(Input): This is a book. 預期的正確結果(Expected Output): This is a book 目標是能簡化,不想要1個1個char來做copy 想請問大家是否有很棒的作法... 感謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.42.35 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1504612370.A.A65.html

09/05 20:03, , 1F
while (*s != ' ') s++; *s = '\n';
09/05 20:03, 1F

09/05 20:06, , 2F
先貼code出來。這功能有好幾種方法可以做
09/05 20:06, 2F

09/05 20:13, , 3F
一樓的滿不錯的
09/05 20:13, 3F

09/05 20:29, , 4F
可是作法1只會讀出This...哪 is a book 還是另外抓.
09/05 20:29, 4F

09/05 20:30, , 5F
我不是要切成 This, is, a, book 四個Word是要分成
09/05 20:30, 5F

09/05 20:30, , 6F
而是兩個字串
09/05 20:30, 6F
※ 編輯: blueguan (223.136.42.35), 09/05/2017 20:31:33

09/05 20:44, , 7F
? 作法1是指一樓嗎? 我覺得你好像誤會了什麼
09/05 20:44, 7F

09/05 20:44, , 8F
while 遇到第一個空格會退出回圈
09/05 20:44, 8F

09/05 20:45, , 9F
另外你說不想一個一個char處理是想找現成函數嗎?
09/05 20:45, 9F

09/05 22:00, , 10F
想不出比一樓更好的做法了
09/05 22:00, 10F

09/05 22:02, , 11F
一樓找出空白字元的位置之後就可以用std::string切割
09/05 22:02, 11F

09/05 23:45, , 12F
這個問題很明顯是一個線性複雜度的問題
09/05 23:45, 12F

09/05 23:46, , 13F
要怎麼不一個一個比對完成這個任務(?
09/05 23:46, 13F

09/05 23:59, , 14F
用 magic numbers?
09/05 23:59, 14F

09/05 23:59, , 15F
XDD
09/05 23:59, 15F

09/06 00:10, , 16F
strtok_s(str, " ,", &p);
09/06 00:10, 16F

09/06 00:18, , 17F
然後在印出 str 和 p
09/06 00:18, 17F

09/06 00:37, , 18F
把他包成一個函數 就可以假裝很簡潔啦
09/06 00:37, 18F

09/06 01:39, , 19F
抱歉C不熟Java的話是這樣做String[] newString = stri
09/06 01:39, 19F

09/06 01:40, , 20F
上面斷掉.. string.split(" ", 2); 即可
09/06 01:40, 20F

09/06 02:20, , 21F
可以#include<水晶球>啊 char* s2 = s + oracle();
09/06 02:20, 21F

09/06 13:32, , 22F
Char array 的話就把第一個space 換成NULL, 第二個str
09/06 13:32, 22F

09/06 13:32, , 23F
ing 就是由NULL 後一個位開始
09/06 13:32, 23F

09/06 13:44, , 24F
sscanf
09/06 13:44, 24F

09/06 17:17, , 25F
樓上這好像也很好
09/06 17:17, 25F

09/06 18:04, , 26F
我記得c-style的字串是可以以/0為結尾,用一樓的做法,
09/06 18:04, 26F

09/06 18:04, , 27F
把空白取代成/0,然後新創一個指標只到/0後面的字串呢?
09/06 18:04, 27F

09/06 18:06, , 28F
啊,我說就是樓樓上的方法
09/06 18:06, 28F

09/06 21:00, , 29F
while (*s != '') s++; *s = '\0'; char *s2 = s + 1;
09/06 21:00, 29F

09/06 21:00, , 30F
其實就是上面講的方法啦, 先決條件是 s 是 char *
09/06 21:00, 30F

09/08 12:02, , 31F
1)*str1指向&str 2)*str2指向&str[5] 3)把str[4]變\0
09/08 12:02, 31F
文章代碼(AID): #1Phf0Ifb (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Phf0Ifb (C_and_CPP)