字符串流缓冲区在 Objective-C++ 中不会清空
Stringstream buffer won't empty in Objective-C++
我想在 Objective-C++ 中使用 std::stringstream,但在此行之后缓冲区不会为空:
ss >> username >> name >> surname >> Id >> email;
我的代码如下所示:
std::shared_ptr<Self> string_to_self(const std::string & info){
std::stringstream ss;
ss.str(info);
std::string username{""};
std::string name{""};
std::string surname{""};
int Id{0};
std::string email{""};
ss >> username >> name >> surname >> Id >> email;
//ss.str() is the same as 'info'.
字符串流在 Objective-C++ 中的工作方式与在 C++ 中的工作方式不同吗?这是其他选择/更好的方法吗?
它按预期工作,您应该自己清除它。您应该调用clear()
来清理任何已设置的标志,然后使用新值对其进行初始化。
第一种方法可以避免调用const char
std::string
的构造函数
ss.clear();
ss.str(std::string());
或者你可以简单地
ss.clear();
ss.str("");
大多数现代编译器都避免调用const char
构造函数
也许std::istream_iterator
在这里对你更有用?
std::shared_ptr<Self> string_to_self(const std::string & info){
std::stringstream ss(info);
std::istream_iterator<std::string> foo(ss);
const std::string username = *foo++;
const std::string name = *foo++;
const std::string surname = *foo++;
const int Id = std::stoi(*foo++);
const std::string email = *foo++;
if(foo == std::istream_iterator<std::string>()){
//empty
}else{
//not empty
}
它按预期工作。弦流不清空,它只是调整操纵器的位置。
所以代码像:
ss.str()
以字符串形式返回字符串流内容的副本(无论读取指针在字符串中的偏移量如何),并且不更改字符串流的内容。
如果要将流字符串设置为剩余内容,则需要做一些人为的操作:
ss.str(ss.tellg() == -1 ? "" : ss.str().substr(ss.tellg()));
这将确定查找位置,如果-1
,则清空内容,否则将其设置为查找位置后面的子字符串。
相关文章:
- 如何清除/清空已打开的文件C++
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 这个用于清空链表的代码可以吗?
- Boost::asio::streambuf consumption() 不清空缓冲区
- 如何从对象的指针清空 std::set?
- 是否使用示波器队列:: swap违反任何规则来清空std ::队列
- std::vector 从一行代码清空到下一行代码
- Eclipse-如何定义宏(不仅是符号)以清空
- C ++如果我使用引用,为什么要清空我的map<string,string>?
- 清空包含char*的结构数组
- 将STD :: unordered_map内存足迹清空后
- 如何清空C 中的输入流
- 清除或清空 VLA
- 为什么我不能以这种方式清空文件?
- 如何清空标准::字符串
- 如何清空列表而不破坏其元素
- 在删除之前清空指针是否会导致内存泄漏
- 重新解释cast<是否安全;bool*>清空内存
- 两个线程之间是否存在任何内存泄漏(缓冲、清空)
- 字符串流缓冲区在 Objective-C++ 中不会清空