2011-04-05 103 views
1

我想轉換的整數字符數組和我碰到這段代碼轉換整數字符串C++

int i = 5; 
std::string s; 
std::stringstream out; 
out << i; 
s = out.str(); 

來到但是,當我嘗試打印的s值仍然打印5.我不不知道它應該這樣做還是我做錯了什麼?此外,我寧願如果我可以將相同的int轉換爲char數組。但我很感謝在這件事上的任何幫助。 謝謝! 代碼取自:Alternative to itoa() for converting integer to string C++?

+11

你想要打印什麼?數字5的文字表示是「5」。 – 2011-04-05 17:06:08

+0

我只是想看看文本表示會是什麼。這是否意味着如果我嘗試將任何大數字轉換爲文本,他們仍然是相同的數字?例如,如果我有-635997,那會是什麼樣子?因爲現在它給了我相同的號碼 – 2011-04-05 17:09:53

+0

還能有什麼?如果不是「-635997」,那麼-635997的文字表示是什麼?給定的數字有許多可能的文本表示;默認情況下,你會得到最簡單和最熟悉的(十進制,沒有前導0)。您可以設置標誌以獲取其他表示。 – 2011-04-06 08:54:42

回答

1

此外,我寧願如果我能轉換成相同的int char數組。

char *charPtr = new char[ s.length() + 1 ] ; // s is the string in the snippet posted 
strcpy(charPtr, s.c_str()) ; 

// ....... 

delete[] charPtr ; // Should do this, else memory leak. 
+0

只是不知道strlen()的參數應該是一個char指針嗎?或者字符串的行爲是否一樣? – 2011-04-05 17:21:24

+0

@Max Eastman:不,你是對的 - 將'std :: string'傳遞給'strlen'是非法的。它應該是'new char [s.length()+ 1];'或'new char [strlen(s.c_str())+ 1];',但當然第二個本質上效率較低。 – ildjarn 2011-04-05 17:41:47

+0

@ildjarn - 你是對的。我想休息的時間,我猜:) – Mahesh 2011-04-05 17:51:34

4

是的,它應該這樣做。如果您對結果執行某種其他字符串類型操作(例如,將其與其他字符串連接在一起,在字符串中搜索字符),您將(主要)注意到與直接打印數字的區別。

剛例如:

std::cout << i+i; // should print "10" 
std::cout << s+s; // should print "55" 
+0

太酷了!謝謝! – 2011-04-05 17:11:09

+0

+1可愛的例子 – davka 2011-04-05 17:12:15

1

如果你想停止擔心一樣,你可能會感興趣的boost/lexical_cast.hpp問題。

#include <boost/lexical_cast.hpp> 
#include <string> 
#include <iostream> 

int main() { 
    const int i=5; 
    const char* s = boost::lexical_cast<std::string>(i).c_str(); 
    std::cout << s << std::endl; 
}