strtok() c++ 如何使用 strtok() 拆分字符串并将每个部分放入向量中?

strtok() c++ How do I split a string with strtok() and put each part in a vector?

我正在尝试实现一个基本终端(如 bash),我目前正在尝试接收用户输入(就像他们在 bash 中输入命令一样)并拆分按空格向上排列并将其放入向量中,这样我就可以从向量中读取并逐个处理每个命令。 我似乎无法编译我的代码,我做错了什么? (这是我目前所拥有的):

#include <iostream>
#include <cstring>
#include <vector>
#include <string>
using namespace std;

int main(){
    vector<string> cmdline;
    string command = "";
    cout << '$';
    getline(cin, command);

    command.c_str();
    char* tokchar;
    tokchar = strtok(command, " ");


    while(tokchar){
        cmdline.push_back(tokchar);
        tokchar = strtok(NULL, " ");
    }
 return 0;
 }

具体来说,编译器错误是:无法将 'std::string' 转换为 'char*' for argument 1 to 'char* strtok(char*, const char*)' 它说错误在我设置 tokchar =...;

的行

我不确定这段代码是否能达到我希望的效果。我将如何修复它并使其将所有命令行参数放入一个由“”分隔的向量中?

您正在使用 C++ 类型和更符合 C 语言习惯的函数。考虑 boost::split 用于 C++。

全部:

char* tokchar;
tokchar = strtok(command, " ");


while(tokchar){
    cmdline.push_back(tokchar);
    tokchar = strtok(NULL, " ");
}

可以替换(无错误)为:

boost::split( cmdline, command, boost::is_any_of(" ") );