//关于流的使用。。。。ostringstream可以实现double类型保留小数点后n位................
转自C++ ostringstream、istringstream、stringstream 用法浅析
ostringstream : 用于执行C风格字符串的输出操作。
istringstream : 用于执行C风格字符串的输入操作。
stringstream : 同时支持C风格字符串的输入输出操作。
通常,ostringstream 类用来格式化字符串,避免申请大量的缓冲区,替代sprintf。该类能够根据内容自动分配内存,其对内存管理也是相当到位。
#include <string>
#include <sstream>//
#include <iostream>
using namespace std;
//ostringstream 用于执行C风格字符串的输出操作
void ostringstream_test()
{
//ostringstream 只支持 << 操作符
std::ostringstream oss;
oss << "this is test" << 123456;
// cout << oss.str() << endl;
oss.str("");//清空之前的内容
oss.clear();//并不能清空内存
//浮点数转换限制
double a, b;
cout << "请输入两个数:";
cin >> a >> b;
// double tmp = 123.1234567890123;
oss.precision(12);
oss.setf(std::ios::fixed);//将浮点数的位数限定为小数点之后的位数
// oss << tmp;
oss << a*b << endl;
std::cout << oss.str() << "\r\n" << std::endl;
}
//istringstream 用于执行C风格字符串的输入操作
void istringstream_test()
{
//istringstream 只支持 >> 操作符
std::string str = "welcome to china 123";
std::istringstream iss(str);
//把字符串中以空格隔开的内容提取出来
std::string out;
while(iss >> out)
{
std::cout << out << std::endl;
}
std::cout << "\r\n" << std::endl;
}
//stringstream 同时支持C风格字符串的输入输出操作
void stringstream_test()
{
//输入
std::stringstream ss;
ss << "hello this is kandy " << 123;
std::cout << ss.str() << "\r\n" << std::endl;
//输出
std::string out;
while(ss >> out)
{
std::cout << out.c_str() << std::endl;
}
std::cout << "\r\n" << std::endl;
}
int main()
{
ostringstream_test();
istringstream_test();
stringstream_test();
system("pause");
return 0;
}
/
转自/C++流istream,ifstream,istringstream的使用
文件头
#include <iostream>#include <fstream>#include <string>#include <vector>#include <sstream>
using namespace std;
从文件中逐词读取
void getFromFile() {
ifstream fin("C:\\data.txt");
string s;
while (fin >> s)
{
cout << "Read from file:" << s << endl;
}
}
从文件中逐行读取
void getFromFileByLine() {
ifstream fin("C:\\data.txt");
string s;
while (getline(fin, s))
{
cout << "Read from file:" << s << endl;
}
}
从文件中逐词读取并写入vector容器中
void fileToVectorByWord() {
ifstream infile;
infile.open("C:\\data.txt");
if (!infile) { //加入异常判断
cout << "error : cannot open the file" << endl;
}
vector<string> v;
string s;
while (!infile.eof()) {
infile >> s;
v.push_back(s);
}
vector<string>::const_iterator it = v.begin(); //开始验证
while (it != v.end()) {
cout << *it << endl;
++it;
}
}
从文件中逐行读取并写入vector容器中
void fileToVectorByLine() {
ifstream infile;
infile.open("C:\\data.txt");
if (!infile) {
cout << "error : cannot open the file" << endl;
}
vector<string> v;
string s;
while (! infile.eof()) {
getline(infile, s);
v.push_back(s);
}
vector<string>::const_iterator it = v.begin();
while (it != v.end()) {
cout << *it << endl;
++it;
}
}
istringstream的使用
void testStringstream()
{
string line;
string word;
while (getline(cin, line)) { //从控制台获取一行字符
istringstream stream(line); //将line绑定成istringstream
while (stream >> word) { //逐词输出
cout << word << endl;
}
}
}