如何使用std :: string时如何使用basic_istream

时间:2011-01-12 17:04:18

标签: c++

我有一个使用basic_istream作为参数的函数,我有一个std :: string,其中包含我需要传递它的数据。我该怎么做?

4 个答案:

答案 0 :(得分:9)

您可以将字符串数据放入流中:

std::string x;
std::stringstream ss(x); // put string into stream

function_taking_stream(ss);

答案 1 :(得分:1)

一个完整的工作示例,展示了如何使用boost property_tree解析json字符串:

#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;

int main ()
{
  std::string jsonString ("{ \"my key\": \"my value\" }");
  ptree pt;
  std::stringstream ss(jsonString);
  read_json(ss, pt);
  std::cout << pt.get<std::string>("my key") << std::endl;
  return 0;
}

答案 2 :(得分:0)

我有一个使用basic_istream作为参数的函数......

所以我假设你有一个函数接受一个从basic_istream模板专用的变量。

...我有一个std :: string,其中包含我需要传递的数据。

所以我假设你想把这些数据提供给istream参数。

我该怎么做?

你没有。您无法将输出提供给输入流!

答案 3 :(得分:0)

我认为OP意味着他有一个basic_istream<E>来读取并希望阅读std::string,而不是std::basic_string<E>

您应该首先写入basic_string,然后将其转换为std :: string。如果您想确保转换正确,您可能需要一个正确的UTF-8到UTF-16转换器。

如果您知道您只处理ASCII字节,则可以执行以下操作:

std::basic_string<E> strTemp;
is >> strTemp;
std::string str( strTemp.begin(), strTemp.end() );

如果您有basic_ostream<E>,您可以先从std :: string中构建一个basic_string<E>,然后将其写入流中。

你可以“专门化”你的模板功能,这样如果E恰好是char,转换很快。为此,您可以将两个字符串输入为非const引用,而专用版本可以只是“交换”。