用空格分隔字符串的最简单方法?

Tur*_*ton 3 c++ string

自从我使用C++已经很长时间了,在我的空闲时间使用Javascript,现在我不确定我记得的是什么.

基本上我只需要通过查看空格将字符串分成几部分.

我看到的所有链接都是自制函数,但我可以发誓有一种方法可以使用标准库通过使用流来实现它,但同样,我很难回忆它并且我的谷歌搜索结果不是帮助.

请记住,它不是我正在使用的流,它只是一个像"Bob Accountant 65 retired"这样的字符串,我必须将字符串中的每个项目提取到自己的数据字段.我一直在搞乱ifstreams和ofstreams但是我甚至不确定我在做什么,忘记了它的语法.

Nat*_*ohl 5

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)