将字符串或char *转换为istream的最佳方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串或char *转换为istream的最佳方法?相关的知识,希望对你有一定的参考价值。

将字符串或char *指针引入istream的最佳方法是什么。

我想做以下事情

std::string a = "abc..";

//I know this can be done, not sure if this is most efficient
// and not sure about char*    pointers
std::istringstream istr (a);
...
foo (istr); 


void foo(std::istream& is) {

}
答案

如果你想从它构造一个istringstream,一个char *到null字符,或者std :: string中的所有东西:

istringstream str(ptr); // char*
istringstream str(other_str); // std::string

如果你谈到想要一个原始指针进入istream的缓冲区,你就不能这样做。 Streams如果需要从文件,终端或其他方式获取数据,可以根据需要缓存他们的东西(好吧,不完全正确。你可以使用strstream,它接受一个原始指针并直接读取/写入。但是这是一个弃用的类 - 不要使用它。我很幸运,我从来没有这样做过)。如果你想要的只是指针,你可以使用streambuf迭代器。它们不是真正的指针,所以你不能从end和其他东西中减去begin

std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
    std::cout << *begin++;

如果你谈论从字符串流中写出的字符串,你可以使用ostringstream::str

ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"

否则,你通常只能从istream读取东西。你需要一个ostream,然后就可以了

stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());

从str指向的字节中准确写出N个字符。您也可以使用<<将其写入流中。它会将所有内容写入空字符或std :: string中的所有内容,但会尊重格式标记,如字段宽度:

stream << ptr; // char*
stream << other_str; // everything from std::string
另一答案

这将有效:

 std::istringstream is("abc...");

因为istringstream是一个istream,所以你可以将你的is对象用作istream。

以上是关于将字符串或char *转换为istream的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 boost`s bufferstream 转换为 istream

将 IEnumerable<char> 转换为字符串的最佳方法?

如何将 IStream 实例中的数据读入 char 指针?

在 Windows 中将 FILE * 或 HANDLE 转换(分配)到 IStream

将 QT 资源转换为 ::std::istream&

将字节数组从 C# 传递到 C++ DLL 作为 char*