[問題] scanf替代品

看板C_and_CPP作者 (程式宅 <囧>)時間8年前 (2016/07/22 07:30), 編輯推噓3(307)
留言10則, 8人參與, 最新討論串1/1
問題(Question): 這問題我一直找不到適合的解法,想問問大家意見 C++11中,printf的替代品已經有[fmt](https://github.com/fmtlib/fmt)可以用了 不過scanf一直沒辦法 去StackOverflow找到推薦的解法大概長這樣 std::stringstream s("123 456 789"); int a, b, c; s >> a >> b >> c; 這方法跟strtok差不多,不過遇到更困難的pattern char str[] = "The value is 10, 3.3."; int v; double v1; sscanf(str, "The value is %d, %lf", &v, &v1); 相對於stringstream,scanf的方式平易近人多了(雖然日後出包的機會也不少) 有更好得作法嘛? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.53.108 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469143857.A.81B.html

07/22 07:52, , 1F
regex 0.0
07/22 07:52, 1F

07/22 08:06, , 2F
Boost 好像有
07/22 08:06, 2F

07/22 08:45, , 3F
pcre
07/22 08:45, 3F


07/22 23:30, , 5F
文法稍複雜可以用 strtok() 或 strsep()
07/22 23:30, 5F

07/22 23:31, , 6F
文法超複雜可以用 yacc 或 bison
07/22 23:31, 6F

07/23 08:28, , 7F
用regex, bison/yacc大概都有大砲打小鳥的感覺
07/23 08:28, 7F

07/23 08:28, , 8F
不過好像也沒更好的選擇了
07/23 08:28, 8F

07/23 13:15, , 9F
可是regex要自己把string轉成integer
07/23 13:15, 9F

07/24 01:38, , 10F
sscanf 減少出包的機會就是善用傳回值。
07/24 01:38, 10F
文章代碼(AID): #1NaLinWR (C_and_CPP)