Rody
Lv 5
Rody asked in 電腦與網際網路程式設計 · 1 decade ago

請問關於 C++ 的 string 型別

string 在 C++ 裡面算是 STL 裡面提供的標準容器之一,也提供了相當多的功能函數,像是 find, replace ... 之類的,但我卻沒有找到格式化字串的函數,請問用過的人可以說明一下,如果使用 string 的時候,要輸出格式化字串要怎麼處理嗎?例如我用 char buf[80];我想要輸出 int i=10;char c='a';double pi=3.14;之前寫法可以是:sprintf(buf,"i=%5d, h=%5x, c=%c, pi=%5f,",i,i,c,pi);那麼用 string 型別宣告的變數,要如何達到相同的效果呢?

Update:

To yen_hao_chen:

你的說明不是很好了解,我看到一堆 &... 這樣的文章我很難懂

另外,cout 不是指標準輸出嗎?但問題是我不一定要把資料輸出到標準輸出上面啊?我想要的只是格式化字串

Update 2:

嗯~~我又研究一下,你寫的有點看得懂啦,好像要用另外一個型別的變數來做中間變數,再把格式化結果丟給 string,但這樣的效果並沒有比 sprintf 好, sprintf 可以在同一個字串內,用簡單的識別字變換格式化條件,你這做法做不到;而且這樣的做法並不比我用 char buf[80]; 填資料高明啊~~

Update 3:

嗯~~好吧,我承認你說得對,你的確有回答了問題,但問題是,有沒有更好的方法來格式化呢?﹙快點或簡單點的方式,像是 Format 或 sprintf 之類的﹚

Update 4:

唉~~我承認你說得沒錯,但不管怎麼說,如此的格式化方法,都必須先產生一個中介物件;原來的方式,則是只要宣告 char buf[80] 就能完成格式化字串填入,如此比較之下,在這方面的表現不就是 string 反而不如 char* ??

3 Answers

Rating
  • Hello
    Lv 4
    1 decade ago
    Favorite Answer

    You can use ostringstream

    For example,

    ostringstream s1;

    int i = 22;

    s1 << "Hello " << i << endl; //Like cout

    string s2 = s1.str(); //Get the string of s1

    cout << s2;

    2006-09-08 13:45:59 補充:

    In fact, if you like, you can use:string tmp.str(buf);to convert your buf char string into C++ string.

    2006-09-08 13:47:52 補充:

    And I just answered your question about"那麼用 string 型別宣告的變數,要如何達到相同的效果呢?"

    2006-09-08 22:56:20 補充:

    For C, your method is good enough. Any for C++, use ostringstream is the easy and good way. You can use setf() to control the format of string. FOr more about ostringstream, please look up in the web.

    2006-09-09 14:35:17 補充:

    For ostringstream, you need not care about the "size". You can use it for very large string, and it takes care of anything to complete your requirement.But for sprintf, the size of buffer is "fixed". You need to allocate the buffer by yourself. That is all.

    2006-09-09 14:41:28 補充:

    Moreover, you can add string to it, not destroying it as sprintf does.

    Source(s): ostringstream help
  • Rody
    Lv 5
    1 decade ago

    感謝您的意見,但是在大多數情況下,簡潔的程式碼看起來還是比較輕鬆的~~

  • none
    Lv 4
    1 decade ago

    我覺得 programmer 自己可以判斷 sprintf() 與 ostringstream 適合的使用時機。以這個問題而言, sprintf() 是個很好的使用結果。但是,當需要 %s, 而 buf 有可能爆掉時,ostringstream 是個不錯的選擇!!

    畢竟,程式的可靠性是比較重要的!!至於一定要往某個方向去走,我是覺得沒有必要 ^__^

Still have questions? Get your answers by asking now.