gpt4 book ai didi

c++ - 将字符串或 char* 放入 istream 的最佳方法?

转载 作者:IT老高 更新时间:2023-10-28 21:46:14 25 4
gpt4 key购买 nike

将字符串或 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* 直到空字符,或者来自 std::string 的所有东西:

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

如果你说想要一个指向 istream 缓冲区的原始指针,你就做不到。如果流从文件、终端或其他方面需要它们,则可以按需获取它们的数据,可选地缓冲它们的东西(嗯,不完全正确。您可以使用 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

关于c++ - 将字符串或 char* 放入 istream 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com