天天看點

2009-05-21 10:32 c++ int/string轉換

1. int to string

itoa(   int   value,   char   *string,   int   radix   );  

    第一個參數:你要轉化的int;  

    第二個參數:轉化後的char*;  

    第三個參數:你要轉化的進制;  

舉例:

輸出:

頭檔案 #include<stdio.h>

文法: int sprintf(string format, mixed [args]...);

傳回值:字元串長度(strlen)

轉換字元

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

% 印出百分比符号,不轉換。

b 整數轉成二進位。

c 整數轉成對應的 ASCII 字元。

d 整數轉成十進位。

f 倍精确度數字轉成浮點數。

o 整數轉成八進位。

s 整數轉成字串。

x 整數轉成小寫十六進位。

X 整數轉成大寫十六進位。

1.sprintf可能引起緩沖區溢出,可以考慮使用 snprintf 或者非标準的 asprintf

2.如果是mfc程式,可以使用 CString::Format

3.如果使用boost,則可以直接使用: string s = boost::lexical_cast <string>(a);

4.atoi 也是不可移植的。

//-----------------------------------------------------------------------------------

// 參考引用 :

2. string to int

//第一種方法

const char* str = "123";

int i;

if(sscanf(str, "%d", &i) == EOF )

{   /* error */}

//第二種方法----C++ with standard library stringstream:

int str2int (const string &str)

{

   stringstream ss(str);

   int num;

   if((ss >> num).fail())

   {       //ERROR  

   }

   return num;

}

//第三種方法----With boost library:

#include <boost/lexical_cast.hpp>

#include <string>

try{   

   std::string str = "123";   

   int number = boost::lexical_cast< int >( str );

}catch( const boost::bad_lexical_cast & )

{    // Error

=============My Test========================

#include "stdafx.h"

#include <cstdio>

#include <iostream>

#include <strstream>

#include <sstream>

using namespace std;

template<class NumType>

bool ConvetStringToNumber(const string& str, NumType& num)

stringstream strStream(str);

if((strStream>>num).fail())

   cout<<"Sorry, convert failed!"<<endl;

   return false;

return true;

bool ConvetNumberToString(const NumType& num, string& str)

stringstream strStream;

strStream<<num;

strStream>>str;   //str = strStream.str(); is ok too.

int _tmain(int argc, _TCHAR* argv[])

string strNum = "22.56";

float fNum;

if(ConvetStringToNumber(strNum, fNum))

   cout<<"fNum = "<<fNum<<endl;

double dNum;

if(ConvetStringToNumber(strNum, dNum))

   cout<<"dNum = "<<dNum<<endl;

int iNum;

if(ConvetStringToNumber(strNum, iNum))

   cout<<"iNum = "<<iNum<<endl;

string aa="abc";

if(ConvetStringToNumber(aa, iNum))

string str;

ConvetNumberToString(fNum, str);

cout<<"str from fNum = "<<str<<endl;

ConvetNumberToString(dNum, str);

cout<<"str from dNum = "<<str<<endl;

ConvetNumberToString(iNum, str);

cout<<"str from iNum = "<<str<<endl;

char c;

cin>>c;

return 0;

Output is :

fNum = 22.56

dNum = 22.56

iNum = 22

Sorry, convert failed!

str from fNum = 22.56

str from dNum = 22.56

str from iNum = 22

繼續閱讀