自从我使用C++已经很长时间了,在我的空闲时间使用Javascript,现在我不确定我记得的是什么.
基本上我只需要通过查看空格将字符串分成几部分.
我看到的所有链接都是自制函数,但我可以发誓有一种方法可以使用标准库通过使用流来实现它,但同样,我很难回忆它并且我的谷歌搜索结果不是帮助.
请记住,它不是我正在使用的流,它只是一个像"Bob Accountant 65 retired"这样的字符串,我必须将字符串中的每个项目提取到自己的数据字段.我一直在搞乱ifstreams和ofstreams但是我甚至不确定我在做什么,忘记了它的语法.
std::strtok是C风格的方式.您可能正在考虑使用a std::stringstream,例如:
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::string input = "foo bar baz quxx\nducks";
std::stringstream ss(input);
std::string word;
while (ss >> word) {
std::cout << word << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,显示:
foo
bar
baz
quxx
ducks
Run Code Online (Sandbox Code Playgroud)
如果你想从一个std::stringstream(或任何类型的std::istream,真的)读取特定数据类型的数据,你可以按照@JerryCoffin的优秀建议operator>>为你的数据类型重载流:
#include <sstream>
#include <string>
#include <iostream>
struct Employee {
std::string name;
std::string title;
int age;
std::string status;
};
std::istream& operator>>(std::istream &is, Employee &e) {
return is >> e.name >> e.title >> e.age >> e.status;
}
int main() {
std::string input = "Bob Accountant 65 retired";
std::stringstream ss(input);
Employee e;
ss >> e;
std::cout << "Name: " << e.name
<< " Title: " << e.title
<< " Age: " << e.age
<< " Status: " << e.status
<< '\n';
}
Run Code Online (Sandbox Code Playgroud)