2010-08-24 65 views
2

我想知道什麼是最簡單的方法來將int轉換爲C++風格的字符串和從C++風格的字符串轉換爲int。從字符串轉換爲整數

編輯

非常感謝你。當將表單字符串轉換爲int時,如果我傳遞一個char字符串會怎麼樣? (例如:「abce」)。

感謝&問候,

像老鼠

回答

0

這是將字符串轉換爲數字。

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <sstream> 

int convert_string_to_number(const std::string& st) 
{ 
    std::istringstream stringinfo(st); 
    int num = 0; 
    stringinfo >> num; 
    return num; 
} 



int main() 
{ 
    int number = 0; 

    std::string number_as_string("425"); 
    number = convert_string_to_number(number_as_string); 

    std::cout << "The number is " << number << std::endl; 
    std::cout << "Number of digits are " << number_as_string.length() << std::endl; 
} 

與明智一樣,以下是將數字轉換爲字符串。

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <sstream> 

std::string convert_number_to_string(const int& number_to_convert) 
{ 
    std::ostringstream os; 
    os << number_to_convert; 
    return (os.str()); 
} 

int main() 
{ 
    int number = 425; 

    std::string stringafterconversion; 
    stringafterconversion = convert_number_to_string(number); 

    std::cout << "After conversion " << stringafterconversion << std::endl; 
    std::cout << "Number of digits are " << stringafterconversion.length() << std::endl; 
} 
+1

Ick ...'#include「stdafx.h」'?你需要其他三個,但你絕對可以不使用'stdafx.h'。哦,'main'應該返回一個整數。 – 2010-08-24 02:34:48

+1

@D。 Shawley:C++實際上有一條規則,說'main'是一個特殊情況,可能會忽略'return 0;',從而產生與放在那裏一樣的效果。 – 2010-08-24 03:07:01

+0

如果我調用這樣的第一個函數會發生什麼:'convert_string_to_number(「blah」)'?事實上,這會悄然失敗,並返回相同的結果,就像我調用'convert_string_to_number(「0」)'一樣。這是我的一個明確的'-1'。 – sbi 2010-08-24 08:17:17

3

也許最簡單是使用operator<<operator>>stringstream(你可以從string初始化stringstream,並使用流的.str()成員檢索字符串

Boost有lexical_cast,這使得這特別容易(t幾乎沒有效率的典範)。正常使用將類似int x = lexical_cast<int>(your_string);

+0

但非常可讀的(和良好命名):-) PS:指lexical_cast的 – 2010-08-24 05:16:09

-1

使用atoi將字符串轉換爲int。使用stringstream轉換另一種方式。

+5

如果你想在訂單上的東西'atoi',至少使用'strtol',它至少可以表明出現錯誤的時間。 – 2010-08-24 02:05:42

1

您可以將「%x」說明符更改爲「%d」或sprintf支持的任何其他格式。確保適當地調整緩存大小「BUF」

int main(){ 
     char buf[sizeof(int)*2 + 1]; 
     int x = 0x12345678; 
     sprintf(buf, "%x", x); 

     string str(buf); 

     int y = atoi(str.c_str()); 
    } 

編輯2:

int main(){ 
    char buf[sizeof(int)*2 + 1]; 
    int x = 42; 
    sprintf(buf, "%x", x); 

    string str(buf); 

    //int y = atoi(str.c_str()); 
    int y = static_cast<int>(strtol(str.c_str(), NULL, 16)); 
} 
+0

爲什麼sizeof(int)* 2? – mousey 2010-08-24 02:17:52

+0

假設整數爲4個字節,則會有8個十六進制數字和「%x」說明符。 – Chubsdad 2010-08-24 02:20:18

+0

我在這裏錯過了什麼嗎? 'sprintf(buf,「%x」,42);'將'2a「放入'buf'中。 'atoi(「2a」)'將返回'2'而不是'42'。 – 2010-08-24 02:32:59