我在将字符串放入矢量字符串时遇到问题

时间:2013-05-26 18:51:22

标签: c++ string vector

由于一些奇怪的原因,原始字符串意味着被拆分成各种其他字符串并使用分隔符放置在矢量字符串中并不能很好地工作。而我似乎无法找到我的错误。

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

using namespace std;

vector<string> split(string target, string delimiter);

int main()
{
    split ("1,2,3,4,5",",");
    return 0;
}

vector<string> split(string target, string delimiter)
{
    vector<string> word;
    string letter;
    int i = 0;
    int k = 0;

    while (target[i] != '\0')
    {
        word.empty();
        word.push_back("target");
        while (target[i] != delimiter[0])
        {
            letter = target[i];
            i++;
        }
        word[i]=letter;
        i++;

    }
    return (word);
}

1 个答案:

答案 0 :(得分:0)

第一个问题是当你调用split时,第二个参数是一个包含单个空格的字符串,但是你要拆分的字符串是用逗号分隔的。 H2CO3在评论部分已经提到的其他问题在下面突出显示为完整性。

  1. 您在while循环的每次迭代期间清空向量。
  2. 您正在每次迭代中添加字符串“target”。
  3. 您正在向量中添加一个字母。你应该添加整个字符串。
  4. 您没有考虑到您提取的分隔符和单个字符串可能大于单个字符。
  5. 匹配字符串中分隔符的整体逻辑是错误的(至少对于当前实现的方式而言)。您只是比较第一个字符,如果这是所需的行为,则将delimiter的类型更改为string::value_type
  6. 本身不是问题,但我建议按const引用而不是按值传递字符串,因为split不需要或复制任何一个字符串。
  7. 以下示例可帮助您更好地了解如何利用标准库中已存在的功能。它使用find的{​​{1}}和substr成员函数,而不是直接直接访问数据。我建议您在继续之前查看std::vectorstd::string的文档。

    std::string