1. 概述
定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。
2. 用法转换
将 int 类型转换为 string 类型( << >> 箭头指向谁表示向谁赋值)
stringstream
#include <string>
#include <sstream>
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
stringstream sstream;
string strResult;
int nValue = 1000;
// 将int类型的值放入输入流中
sstream << nValue;
// 从sstream中抽取前面插入的int类型的值,赋给string类型
sstream >> strResult;
cout << "[cout]strResult is: " << strResult << endl;
printf("[printf]strResult is: %s\n", strResult.c_str());
return 0;
stringstream转string,用str(),清空的话用ss.str("")
stringstream sstream;
// 将多个字符串放入 sstream 中
sstream << "first" << " " << "string,";
sstream << " second string";
cout << "strResult is: " << sstream.str() << endl;
// 清空 sstream
sstream.str("");
string 转 char*
char *strcpy(char* dest, const char *src);
string s1;
char *s = new char[len + 1];
strcpy(s, s1.c_str());
数字转字符串
itoa(int1, char*, int2); //将int1以int2进制存储在char*数组里
ltoa(long, char*, int); //将long以int进制存储在char*数组里
ultoa(unsigned long, char*, int); //将unsigned long以int进制存储在char*数组里
gcvt(float, int, char*);
//将float保留int位有效数字存储在char*数组里,四舍五入,科学计数法,注意如果是3,两位及以上有效数字会转化成3.,多一个小数点
char*=ecvt(double, int, int*1, int*2);
//将double的整数部分和int位小数去掉小数点存储在返回值char*里,返回的int*1是小数点位置,返回的int*2是0表示正数,1表示负数
//超出int位的部分不补零
char*=fcvt(double, int, int*1, int*2);
//将double的整数部分和int位小数去掉小数点存储在返回值char*里,返回的int*1是小数点位置,返回的int*2是0表示正数,1表示负数
//超出int位的部分补零
字符串转数字:
int=atoi(char*); //把char*转化为int
long=atol(char*); //把char*转化为long
double=atof(char*); //将char*转化为double
字符串转string
string str;
str.assign(char*, int); //从char*开始的int个字符赋值给str,若省略int这个参数,则默认赋值到最后
数字转string, to_string:
int x=3;
string str=to_string(x); //若改成float或者double结果会自动保留6位小数,但只要是整数都没问题,所以时间允许的话更推荐下面这种方法
double d=3.5;
stringstream ss;
ss<<d;
string s=ss.str();
ss.clear(); //clear才能使答案正确
ss.str(“”); //重新赋值优化空间
string转int, 可以是负数
采用标准库中 atoi 函数, 输入是const char*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 字符串转整型 */
void StrToInt(const string &s)
{
int num = 0;
// 将string类型先转化为const char*类型
const char *str = s.c_str();
num = atoi(str);
cout << num << endl;
}
采用 stoi 函数 ,输入是string
#include <string>
/* 字符串转整型 */
/*
* 注:某些老版本的string不支持该函数
* 原型:int stoi (const string &str, size_t *idx = 0, int base = 10);
*/
void StrToInt(const string &s)
{
int num = 0;
num = stoi(s); // 等价于stoi(s, 0, 10);
cout << num << endl;
}
stoi(str, 0, 2); //将字符串 str 从 0 位置开始到末尾的 2 进制转换为十进制
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "1010";
int a = stoi(str, 0, 2);
cout << a << endl;
return 0;
}