将字符串或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) { }
Johannes Sch.. 19
如果你想从它构造一个istringstream,一个char*到null字符,或者std :: string中的所有东西:
istringstream str(ptr); // char* istringstream str(other_str); // std::string
如果你谈到想要一个原始指针进入istream的缓冲区,你就不能这样做.Streams如果需要从文件,终端或其他方式获取数据,可以按需获取数据(好吧,不完全正确.你可以使用a strstream
,接受原始指针并直接从中读取/写入.但它是一个弃用的类 - 不要使用它.我很幸运,我从来没有这样做过).如果你想要的只是指针,你可以使用streambuf迭代器.他们不是真正的指针,因此你不能减去end
从begin
和其他的东西:
std::istreambuf_iteratorbegin(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
Fredrik Jans.. 17
这将有效:
std::istringstream is("abc...");
因为istringstream是一个istream,所以你可以将你的is对象用作istream.
如果你想从它构造一个istringstream,一个char*到null字符,或者std :: string中的所有东西:
istringstream str(ptr); // char* istringstream str(other_str); // std::string
如果你谈到想要一个原始指针进入istream的缓冲区,你就不能这样做.Streams如果需要从文件,终端或其他方式获取数据,可以按需获取数据(好吧,不完全正确.你可以使用a strstream
,接受原始指针并直接从中读取/写入.但它是一个弃用的类 - 不要使用它.我很幸运,我从来没有这样做过).如果你想要的只是指针,你可以使用streambuf迭代器.他们不是真正的指针,因此你不能减去end
从begin
和其他的东西:
std::istreambuf_iteratorbegin(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.