[問題] 可以用scanf存C++ String嗎?

看板C_and_CPP (C/C++)作者 (Y.C.K)時間16年前 (2010/03/30 00:26), 編輯推噓3(3013)
留言16則, 3人參與, 最新討論串1/1
Q1: (已解決..就是此題不能這樣搞XD) 想請問我用了C++ String宣告變數之後 能否用C的Scanf把資料輸入該變數 然後用printf輸出? 像是: string text; scanf("%s",&text); printf("%s\n",text); ------------------------------------------------- Q2: 我現在用了C++ STL中的map開了一個Table map<string,string> Table; Table["Test"]="12345"; 然後有一個char*變數為temp,其內容為"Test" 我可以用這個temp去作Table的index嗎? 像是cout<<Table[temp] <<endl; 然後顯示出"12345" 可以這樣搞嗎? 不行的話能不能作什麼修正去實行這個作法? -- 諸葛亮 :「魯肅,近來可好?」 魯肅 :「安然無恙。」 諸葛亮 :「魯夫人呢?」 魯肅 :「他應該在偉大的航道上。 」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.233.40.239

03/30 00:28, , 1F
怎麼會想拿C的函式去套C++的物件呢 XD
03/30 00:28, 1F

03/30 00:29, , 2F
忘了補結論 @@" 我認為不行
03/30 00:29, 2F

03/30 00:29, , 3F
嗯..因為作業上的需要..所以想試試看能不能這樣搞Orz...
03/30 00:29, 3F
※ 編輯: YCK 來自: 118.233.40.239 (03/30 00:32)

03/30 00:40, , 4F
1.可以printf不能scanf std::string只有c_str()讓你拿
03/30 00:40, 4F

03/30 00:40, , 5F
const char* 除非你要自己用const_cast硬轉 但是這樣不
03/30 00:40, 5F

03/30 00:40, , 6F
能保證會發生什麼事
03/30 00:40, 6F

03/30 00:41, , 7F
2.可以 因為string有string(const char*) constructor
03/30 00:41, 7F

03/30 00:43, , 8F
這種問題查一下reference就有答案了吧..STL的reference
03/30 00:43, 8F

03/30 00:43, , 9F
應該隨便google都有:P
03/30 00:43, 9F

03/30 00:45, , 10F
我有看cppreference跟cPlusPlus...看了還是不大會用
03/30 00:45, 10F

03/30 00:45, , 11F
對C++實在很不熟..||
03/30 00:45, 11F
關於Q2: char code[7],op[3]; while(scanf("%s",code)!=EOF){ code[6]='\0', op[2]='\0'; printf("Input Code:%s\n",code); strncpy(op,code,2); cout<<op<<endl; printf("OP-code:%s, mnemonic:%s\n",op,Table[op]); } 其中op[3]是在while中才被指定內容. 執行到cout<<op<<endl;這邊都ok 但是最後一行printf就會掛掉..如果把Table[op]拿掉就正常... 所以..不能這樣用嗎? ※ 編輯: YCK 來自: 118.233.40.239 (03/30 00:52) ※ 編輯: YCK 來自: 118.233.40.239 (03/30 00:53)

03/30 00:58, , 12F
Table[op].c_str() ?
03/30 00:58, 12F

03/30 01:03, , 13F
Orz...我一定要找個時間把C++重學一次.....
03/30 01:03, 13F

03/30 01:03, , 14F
感謝holymars以及nowar100!!!
03/30 01:03, 14F

03/30 01:35, , 15F
其實你查ref的時候可以注意一下型態 像是%s要char*字串
03/30 01:35, 15F

03/30 01:35, , 16F
可是你卻給他string 當然吃不下去
03/30 01:35, 16F
文章代碼(AID): #1BiDIYmG (C_and_CPP)
文章代碼(AID): #1BiDIYmG (C_and_CPP)