[問題] 找出句子中最長的單字(C++)

看板C_and_CPP作者 (不人氣揪團師)時間6年前 (2017/12/10 13:03), 6年前編輯推噓2(2028)
留言30則, 3人參與, 6年前最新討論串1/2 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include <iostream> #include <cstdlib> #include <cstring> #include <string> 問題(Question): 程式碼使用Dev C++輸出結果正常 但是使用VC執行,結果後端會出現一堆亂碼 餵入的資料(Input): 條件 1. 遇到符號'.'為結數字元 2. 以空白鍵當作做為區隔單字識別字元 3. 長度一樣則輸出第一個 輸入測試字串 I am a normal ptt user like everybody. Hello world. 預期的正確結果(Expected Output): https://imgur.com/a/lvtaJ 錯誤結果(Wrong Output): https://imgur.com/a/Po9Ep https://imgur.com/a/CBkl9 程式碼(Code):(請善用置底文網頁, 記得排版) https://ideone.com/AZiEjb 補充說明(Supplement): 不曉得是不是因為VC會自動輸出 string str_arr[10] = {}; 後面所有沒有被初始化或是指定值的部分? ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.104.9 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1512882203.A.BE1.html ※ 編輯: MrPanda (111.246.104.9), 12/10/2017 13:06:22 ※ 編輯: MrPanda (111.246.104.9), 12/10/2017 13:07:39

12/10 13:16, 6年前 , 1F
你可能要先弄清楚C-style string是null-terminated
12/10 13:16, 1F

12/10 13:18, 6年前 , 2F
str2最後並沒有擺入最重要的'null' character
12/10 13:18, 2F

12/10 13:30, 6年前 , 3F
為什麼不先跑一下課本範例呢
12/10 13:30, 3F

12/12 15:00, 6年前 , 4F
建議你把cppreference的list initialization看個一輪
12/12 15:00, 4F

12/12 15:00, 6年前 , 5F
問題通通迎刃而解
12/12 15:00, 5F

12/12 17:34, 6年前 , 6F
樓上示範一下如何在讀完你說的參考資料以後 寫出"迎刃而解"
12/12 17:34, 6F

12/12 17:34, 6年前 , 7F
的程式碼
12/12 17:34, 7F

12/12 17:59, 6年前 , 8F
str1~str3就少了一個空的{}
12/12 17:59, 8F

12/12 18:01, 6年前 , 9F
加上去後會對陣列作聚合初始化,因為{}為空,每個char
12/12 18:01, 9F

12/12 18:01, 6年前 , 10F
以{}初始,經值初始化後為0
12/12 18:01, 10F

12/12 18:46, 6年前 , 11F
正確的初始化的確是好習慣 也能降低程式錯誤的機率 但是這
12/12 18:46, 11F

12/12 18:46, 6年前 , 12F
篇的問題是 他的C-style Strings 並沒有包含Null Character
12/12 18:46, 12F

12/12 18:46, 6年前 , 13F
而且Null Character可不等於0阿
12/12 18:46, 13F

12/12 18:57, 6年前 , 14F
啊,我一直把'\0'這玩意當成0了
12/12 18:57, 14F

12/12 19:08, 6年前 , 15F
規格書:null character是個byte且所有的bits都被設成0
12/12 19:08, 15F

12/12 19:11, 6年前 , 16F
但是0這個literal 卻不一定是一個byte
12/12 19:11, 16F

12/12 19:16, 6年前 , 17F
我前面講的{}是把char清0,非指literal
12/12 19:16, 17F

12/12 19:50, 6年前 , 18F

12/12 19:50, 6年前 , 19F
code幾乎一樣,只改四行
12/12 19:50, 19F

12/12 20:34, 6年前 , 20F
還是錯啊
12/12 20:34, 20F

12/12 21:11, 6年前 , 21F
已經跑完確認過了,改那四行就沒有問題
12/12 21:11, 21F

12/12 21:14, 6年前 , 22F
str2一開始的0初始化就會把null charatcer填進去
12/12 21:14, 22F

12/12 21:17, 6年前 , 23F
是500個byte全部被清0,到底錯在哪
12/12 21:17, 23F

12/12 21:39, 6年前 , 24F
str2按程式邏輯不會全部被str1填值,至少str2[499]會
12/12 21:39, 24F

12/12 21:39, 6年前 , 25F
是null character
12/12 21:39, 25F

12/12 22:21, 6年前 , 26F
錯在邊吃火鍋邊看程式碼 沒看到32行 XD
12/12 22:21, 26F

12/12 22:24, 6年前 , 27F
這樣寫還不太好啦 下次還是可能會遇到類似問題
12/12 22:24, 27F

12/12 22:24, 6年前 , 28F
我想表達的是 你不該為了一個null character 不斷的去把整
12/12 22:24, 28F

12/12 22:26, 6年前 , 29F
個buf寫0 至少效能上也有疑慮
12/12 22:26, 29F

12/12 22:45, 6年前 , 30F
我只是挑出有bug的地方,沒有要改他架構
12/12 22:45, 30F
文章代碼(AID): #1QBC0RlX (C_and_CPP)
文章代碼(AID): #1QBC0RlX (C_and_CPP)