使用向量和char *拆分实现

时间:2017-10-20 19:09:39

标签: c++ arrays vector

我正在尝试使用嵌套向量基于分隔符拆分char *但是char *的最后一个单词似乎没有添加到向量>

vector<vector<char>> split(char* word, const char de){
    vector<vector<char>> words;
    vector<char> c_word;
    while(*word){
        if(*word == de){
            words.push_back(c_word);
            c_word.clear();
            word++;
            continue;
        }
        c_word.push_back(*word);
        word++;
    }
    return words;
}

使用示例:

int main() {
    char *let = "Hello world!";

    vector<vector<char>> words = split(let, ' ');
    for(int x = 0;x < words.size();x++){
        for(int y = 0;y < words[x].size();y++){
            cout << words[x][y];
        }
        cout << endl;
    }
}

这将只打印Hello

2 个答案:

答案 0 :(得分:-1)

这是一个包含多个分隔符的完整工作代码

vector<vector<char>> split(char* word, const char de) {
    vector<vector<char>> words;
    vector<char> c_word;
    int index = 0;
    int j = 0;
    char *temp = word;
    int numspaces = 0;
    while (*word) {
        if (*word == de) {
            words.push_back(c_word);
            c_word.clear();
            word++;
            j = index;
            numspaces++;
        }
        index++;
        c_word.push_back(*word);
        word++;
    }
    j +=numspaces;
    char *sub = &temp[j];
    c_word.clear();
    while (*sub)
    {
        c_word.push_back(*sub);
        sub++;
    }
    words.push_back(c_word);
    return words;
}
void main()
{
    vector<vector<char>> result = split("Hello World! Ahmed Saleh", ' ');

}

答案 1 :(得分:-2)

对于其他任何想知道如何使用char *而不是string进行此实现的人。我的代码缺失的是最后一个c_word添加到单词,因为while到达null终止符时已经结束并且没有添加最后一个单词,这是固定代码:

   vector<vector<char>> split(char* word, const char de){
    vector<vector<char>> words;
    vector<char> c_word;
    while(*word){
        if(*word == de){
            words.push_back(c_word);
            c_word.clear();
            word++;
            continue;
        }
        c_word.push_back(*word);
        word++;
    }
    words.push_back(c_word);
    return words;
}