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(" ") );
我正在尝试实现一个基本终端(如 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(" ") );