包含 <sstream>,顺便加个使用名字空间 std 的声明,可以开始了。sstream 里包括 istringstream、ostringstream、stringstream、stringbuf 和各宽字符版本的对象类型。更方便的格式化字符串处理,更安全的类型转换。
你可以使用 C++11 标准库里的 stringstream,它可以实现字符串和所有各种数字的转换,包括 int, float, double,简单粗暴,不用考虑缓冲区溢出的问题。自从知道这个神器之后,我就没有用过 sscanf 和 sprintf 函数了。
当要进行多次数据类型转换时,需要先使用 clear() 清空流,不然之前的数据会影响下一次数据类型转换。
#include <string>
#include <sstream> // 包含头文件
int main()
{
std::stringstream str2digit;
std::string sint='1', sfloat='1.1', sdouble='1.2';
int dint;
float dfloat;
double ddouble;
str2digit << sint; str2digit >> dint; // string to int
str2digit.clear();
str2digit << sfloat; str2digit >> dfloat; // string to float
str2digit.clear();
str2digit << sdouble; str2digit >> ddouble; // string to double
std::cout << dint << ", " << dfloat << ", " << ddouble << std::endl;
return 0;
}
string str = "123";
int n = atoi(str.c_str());
int stringToInt(const string &s) {
int v;
stringstream ss;
ss << s;
ss >> v;
return v;
}
ifstream infile;
infile.open(filename, ios::in);
int DATA1;
float DATA2, DATA3, DATA4;
stringstream sem;
sem << infile.rdbuf();
while (true)
{
sem >> DATA1;
if (sem.eof()) break;
sem >> DATA2;
sem >> DATA3;
sem >> DATA4;
DATA1list.push_back(DATA1);
DATA2list.push_back(DATA2);
DATA3list.push_back(DATA3);
DATA4list.push_back(DATA4);
}
infile.close();
基本上太强了。再举例,这次是保存数据到文件,虽是简单,但如果按我以前用 fstream 文件流的方法,效果比 C 的 fwrite 要糟糕:
ofstream fileSave;
fileSave.open(filename, ios::ate);
ostringstream strStream;
strStream.setf(ios::showpoint);
strStream << std::setprecision(4);
for(int i = 0 ; i < Num; i++)
{
strStream<<DATA1[i]<< " " <<DATA2[i]<< " " <<DATA3[i]<< " " <<DATA4[i]<<endl;
fileSave.write( strStream.str().c_str(), strStream.str().size() );
}
fileSave.close;
清空一个 stringstream 对象 (stringstream strs) 里的内容时,单 strs.clear() 是不行的,要用 strs.str("") 这句才行哦。
// 把整个文件内容存储到单独一个字符串里:
ofstream dfileSave;
stringstream outstream;
dfileSave.open("tResult.txt", ios::in | ios::app);
std::filebuf *pFileBuffer = dfileSave.rdbuf();
outstream << pFileBuffer;
int filesize = pFileBuffer->pubseekoff(0, ios::end, ios::in);
std::string sre = outstream.str(); // 1
const char *de = sre.c_str(); // 2
dfileSave.close();