C++数值和字符串之间的转换方法(只讨论比较简单的办法)

    技术2026-06-06  12

    直接上代码

    数值转字符串

    1.方法一 首先推荐用用C++的stringstream。 #include<sstream> 主要原因是操作简单。 数字转字符串,int float等类型 同理。 我已经把这个写成了函数模板,应该可以直接用(vs2017编译执行没问题。) //数字->string #include <string> #include<iostream> #include <sstream> using namespace std; template<class T> void num_to_str(T t, string& str) { //str是待赋值的字符串 stringstream ss; ss << t; ss >> str;//or str = ss.str(); } int main() { string str_; num_to_str(12.43, str_); cout <<"str_="<< str_ << endl; cout << "12.43" << endl; return 0; } 2.方法二 string to_string (int val); 使用#include<string>头文件中的内联函数 to_string(val);//重载多个数值类型 string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val); //实例 int main() { string str_1=to_string(123); cout <<"str_1="<< str_1 << endl; string str_12 = to_string(12.354); cout << "str_12=" <<str_12 << endl; unsigned int n13 = 12; cout <<"to_string(12)="<< to_string(n13) << endl; return 0; }

    字符串转数值

    string类型的字符串

    1.方法一 使用C++的stringstream //实例: //string->数字 #include <string> #include<iostream> #include <sstream> using namespace std; template<class T> void str_to_num(T& t, string str) { //t是待赋值的数字 stringstream ss; ss << str; ss >> t; } int main() { string str = "12377777.456"; double double_ = 0; int int_ = 0; str_to_num(double_, str); str_to_num(int_, str); cout << "int_=" << int_ << "\n" << "double_=" << fixed<<setprecision(3)<<double_ << endl; //out: //int_=12377777 //double_=12377777.456 return 0; } 2.方法二 函数原型 说明 int stoi(const string& _Str, size_t *_Idx = 0,int _Base = 10) 把字符串_Str从_Idx 开始转换成_Base 进制的int long stol(const string& _Str, size_t *_Idx = 0,int _Base = 10) 把字符串_Str从_Idx 开始转换成_Base 进制的long unsigned long stoul(const string& _Str, size_t *_Idx = 0,int _Base = 10) 把字符串_Str从_Idx 开始转换成_Base 进制的unsigned long long long stoll(const string& _Str, size_t *_Idx = 0, int _Base = 10) 把字符串_Str从_Idx 开始转换成_Base 进制的long long unsigned long long stoull(const string& _Str, size_t *_Idx = 0,int _Base = 10) 把字符串_Str从_Idx 开始转换成_Base 进制的unsigned long long float stof(const string& _Str, size_t *_Idx = 0) 把字符串_Str从_Idx 开始转换成float double stod(const string& _Str, size_t *_Idx = 0) 把字符串_Str从_Idx 开始转换成double long double stold(const string& _Str, size_t *_Idx = 0) 把字符串_Str从_Idx 开始转换成long double 实例: #include <iostream> #include<string> using namespace std; int main() { string str = "123.345"; int i = stoi(str); float f = stof(str); double d = stod(str); cout << "i = " << i << "\nf = " << f <<"\nd = "<<d<< endl; string s="222.22"; cout<<"s="<<s<<endl; int a = 222; int ot = stoi(s,0,10); int ol = stol(s,0,10); float of = stof(s,0); double od = stod(s,0); cout<<"ot="<<ot<<endl; cout<<"ol="<<ol<<endl; cout<<"of="<<of<<endl; cout<<"od="<<od<<endl; return 0; } //附加:上面几个函数建议这样记忆: //拆开来记忆:stoi->string to int

    char数组类型字符串

    可以采用库文件<stdlib.h>里的函数 double atof (char const* _String) 将字符串_String转换为双精度浮点型值。 int atoi (char const* _String) 将字符串_String转换为整型值。 long atol (char const* _String) 将字符串_String转换为长整型值。 long long atoll (char const* _String) 将字符串_String转换为long long值。 float strtof (const char* str, char** endptr); 将字符串str转换为单精度浮点型值,到endptr停止 double strtod(const char * str,char ** endptr) 将字符串str转换为双精度浮点型值,到endptr停止。 long int strtol (const char* str, char** endptr, int base) 将字符串str转换为base进制长整值,到endptr停止。 long double strtold (const char* str, char** endptr) 将字符串_String转换为长双精度浮点型值,到endptr停止。 long long int strtoll (const char* str, char** endptr, int base) 将字符串str转换为base进制长长整值,到endptr停止。 unsigned long int strtoul (const char* str, char** endptr, int base) 将字符串str转换为base进制无符号长整值,到endptr停止。 unsigned long long int strtoull (const char* str, char** endptr, int base) 将字符串str转换为base进制无符号长长整值,到endptr停止。 *endptr 为NULL时,无法获取停止后的下一个字符 *base如果为0时,将会按照字符串中的格式来转换 #include <iostream> using namespace std; int main() { char str[]= "123.34 5.12"; char* dptr; int i = atoi(str); float f = atof(str); double d = strtod(str,&dptr); double dd = strtod(dptr, NULL); cout << "i = " << i << "\nf = " << f <<"\nd = "<<d<<"\ndd = "<<dd <<endl; system("pause"); return 0; } //输出: i = 123 f = 123.34 d = 123.34 dd = 5.12 //关于base的举例 #include <iostream> #include<stdlib> using namespace std; int main() { char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff"; char * pEnd; long int li1, li2, li3, li4; li1 = strtol(szNumbers, &pEnd, 10); li2 = strtol(pEnd, &pEnd, 16); li3 = strtol(pEnd, &pEnd, 2); li4 = strtol(pEnd, NULL, 0); printf("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4); system("pause"); return 0; } //输出 60c0c0(16) = 6340800(10) -1101110100110100100000(2) = -3624224(10) 0x6fffff(0自己识别) = 7340031 (10) The decimal equivalents are: 2001, 6340800, -3624224 and 7340031 ##代码引用[C++中字符串与数值转换(超详细)](https://blog.csdn.net/qq_33670157/article/details/104690110?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase)

    以下是文章部分引用链接,十分感谢!!!!! C++中字符串与数值转换(超详细) C++中的字符串(String)和数值转换

    Processed: 0.016, SQL: 9