字符IO
sstream头文件定义了三种类型来支持字符串IO,istringstream从string读取数据,ostringstream向string写入数据,stringstream既可以从string读取数据也可以向string写入数据。
int main(void)
{
std::istringstream strIn;
strIn.str("yfg 13456781234");
std::string name;
std::string phoneNumber;
//istringstream会以空格分割字符串
strIn >> name;
strIn >> phoneNumber;
std::cout << "name:" << name << std::endl;
std::cout <<"phone:"<<phoneNumber << std::endl;
std::ostringstream strOut;
strOut << "dec:" << 15 << std::hex << " hex:" << 15 << std::endl;
std::cout << strOut.str();
system("pause");
return 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
当使用stringstream读取数据,再写入数据到string后,状态会变为eof,需要调用clear()重置状态后才能重新读写数据。
int main()
{
string str;
stringstream ss;
ss << "hello";
cout << ss.rdstate() << endl;//0
ss >> str;
cout << ss.rdstate() << endl;//1 eof
ss << "world";
cout << ss.rdstate() << endl;//5 eof+bad
system("pause");
}
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
我们可以用str(s)清空或修改stringstream中保存的string,用str()获取stringstream中保存的string。
int main()
{
stringstream ss;
ss << "123456";
ss.str("");
ss << "abcdefg";
cout << ss.str()<<endl;//abcdefg
ss.str("100");
cout << ss.str() << endl;//100
system("pause");
}
运行结果:
abcdefg
100