C++中的ostringstream、istringstream和getline()

首先,ostringstream、istringstream头文件为:

#include<sstream>

1.ostringstream

向string中写入数据,当我们构造输出时,希望最后一起输出,使用ostringstream,即我们可以用它来格式化字符串。如caffe源码Blob中有个函数:

inline string shape_string() const {
    ostringstream stream;
    for (int i = 0; i < shape_.size(); ++i) {
      stream << shape_[i] << " ";
    }
    stream << "(" << count_ << ")";
    return stream.str();
  }

这里就使用了ostringstream,它将shape_的内容通过循环写到stream中,然后再写入括号和相应内容,最后通过str()得到stream中的string拷贝,return。

举例:

int main(int argc, char* argv[])
{
	std::ostringstream stream;
	stream << "Hello"<<" ";
	stream << "World";
	std::cout << stream.str();
	getchar();
	return 0;
	
}

最后输出:

Hello World


2.istringstream

从string中读取数据,例如我们有一行单词,然后对该行单词中的各个单词逐个处理:
int main(int argc, char* argv[])
{
	std::istringstream stream("You are the best");
	std::string str;

	while(stream >> str)
		std::cout << str<<"\n";

	getchar();
	return 0;
}
最后输出:
You
are
the
best

3.getline()

getline()头文件为
#include <string>

getline()的原型为:
istream& getline(istream &in, string &line, char delim);
in是一个输入流,如cin、ifstream等。line是将输入流中的字符串放到这个string中,delim是结束字符,默认情况下是‘\n’
所以,我们可以使用getline从文件中逐行读取到string中,然后将该行和istringstream绑定,逐个字符串处理。
例如,txt文件中每行的内容为:
000002.jpg car 44 28 132 121
逐行读取,并对每行中的字符串逐个处理。
int main(int argc, char* argv[])
{
	std::string line;
	std::string word;
	std::ifstream fin("test.txt");
	
	while (getline(fin, line))
	{
		std::istringstream stream(line);
		while (stream >> word)
			std::cout << word << "\n";
	}
	getchar();
	return 0;
}

最后输出:

后面的数字可以转成int:
atoi(stream.c_str());



你可能感兴趣的:(C++中的ostringstream、istringstream和getline())