在没有for循环的情况下解析字符串的字符数组?

时间:2017-10-09 21:40:13

标签: c++ arrays string parsing char

我有一个程序,它接受一个用户输入,其范围可以是一个5 char命令,例如" help"并且还支持标记类型的命令,例如"删除-p' George'"

我没有多少c ++经验,除了做一堆for循环之外,还想知道是否有更有效的方法来解析char数组。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

除了评论中建议的boost库之外,如果你正在解析一组相对较小的参数,你可以使用简单的std::cin在程序运行时接受参数,例如:

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> args;
    std::string arg;
    while(std::cin >> arg) {
        args.push_back(arg);
    }
}

以上需要EOF(不回车)来标记命令的结束。

对于回车以标记命令的结束,您需要getline(),如下所示:

std::vector<std::string> get_args() {
    using std::string;
    using std::stringstream; // don't forget to include <sstream> header

    string line;
    getline(std::cin, line);
    stringstream ss;
    ss << line;

    std::vector<string> cmds;
    string cmd;
    while (ss >> cmd) {
        cmds.push_back(cmd);
    }

    return cmds;
}

或者,如果您希望主要函数采用参数:

 int main(int argc, char **argv) {
     // The call to the excutable itself will be the 0th element of this vector
     std::vector<std::string> args(argv, argv + argc);
 }

答案 1 :(得分:0)

是的,您可以将char数组分配给字符串,如下所示:

char array[5] = "test";
string str (array);
cout << str;

输出:

test