编程/C++
type转变| modified | Tuesday 1 July 2025 |
|---|
老办法。
1//older version
2atoi( str.c_str() )
C++ 11标准库方法。
1// string -> integer
2int i = std::stoi(s);
3
4// string -> float
5float f = std::stof(s);
6
7// string -> double
8double d = std::stod(s);
借助istringstream。
1#include <sstream>
2// string -> integer
3std::istringstream ( str ) >> i;
4
5// string -> float
6std::istringstream ( str ) >> f;
7
8// string -> double
9std::istringstream ( str ) >> d;
Boost’s lexical_cast
1// Boost's lexical_cast
2#include <boost/lexical_cast.hpp>
3#include <string>
4
5std::string str;
6
7try {
8 int i = boost::lexical_cast<int>( str.c_str());
9 float f = boost::lexical_cast<int>( str.c_str());
10 double d = boost::lexical_cast<int>( str.c_str());
11 } catch( boost::bad_lexical_cast const&amp;amp; ) {
12 // Error management
13}
1char* strtoch(string str){
2 char *cstr = new char[str.length() + 1];
3 strcpy(cstr, str.c_str());
4 return cstr;
5}
6//------------------------------------------//
7std::string x = "hello world";
8const char* p_c_str = x.c_str();
9const char* p_data = x.data();
10
11char* p_writable_data = x.data(); // for non-const x from C++17
12char* p_x0_rw = &x[0]; // compiles if x is not const...
13
14//------------------------------------------//
15std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);
16// or
17std::string str;
18std::vector<char> writable(str.begin(), str.end());
19writable.push_back('\0');
1#include <stdlib.h>
2
3int atoi(const char *nptr);
4long atol(const char *nptr);
5long long atoll(const char *nptr);
6long long atoq(const char *nptr);
1// read the value as an ascii code
2char a = 'a';
3// to
4int ia = (int)a;
5// or
6int ia = a;
7// or
8int num = static_cast<int>(letter); // if letter='a', num=97
9//------------------------------------------//
10//convert the character '0' -> 0, '1' -> 1, etc
11char a = '4';
12int ia = a - '0'; // a - '0' is equivalent to ((int)a) - ((int)'0')
1int i = 49;
2char c = i; // c='1' 49=1
3char c = (char)i; // c='1' 49=1
4char c = '0'+i; // c='a' 48+49=97=a
1int i = 49;
2char buffer[33];
3char *c = itoa(i,buffer,10);
1#include <string>
2
3int i = 49;
4
5std::string s = std::to_string(i);
6
7// or
8auto s = std::to_string(i);
9
10// or
11char *intStr = itoa(i);
12string str = string(intStr);
13
14// or
15
16#include <sstream>
17
18stringstream ss;
19ss << a;
20string str = ss.str();
21
22// or
23
24#include <sstream>
25
26template <typename T>
27std::string NumberToString ( T Number )
28{
29 std::ostringstream ss;
30 ss << Number;
31 return ss.str();
32}
33// or
34#include <boost/lexical_cast.hpp>
35int num = 4;
36std::string str = boost::lexical_cast<std::string>(num);