将字符串字符映射到向量

时间:2019-06-05 09:08:08

标签: c++

请告诉我这种将字符串字符映射到向量的方法有什么问题。

Errno::ENOENT: No such file or directory @ rb_sysopen - /home/deployer/apps/fids/releases/20190604090924/tmp/cache/70A/380/.permissions_check.70228682401260.18260.410918

收到的错误:E0304,C2664,C4018

2 个答案:

答案 0 :(得分:1)

std::vector<std::string>不包含单个字符作为元素,而是std::string个对象。 std::string对象始终是字符序列,您不能使用直接初始化从单个字符构造std::string。但这是您想要做的:

y.push_back(x[i]);
//          ^^^^ returns a reference to the i-th character in the string

您要么要将向量实例化更改为std::vector<char>,因此函数签名将为

void strTOvec(string x, vector<char> y)

或者您可以保留向量类型并使用列表初始化:

y.push_back({x[i]});
//          ^    ^ Note the additional braces

尽管这两个选项都反映了完全不同的行为。第一个将x中的每个字符加到一个矢量或单个字符,第二个将x中的每个字符变成一个新的string对象,其长度为1,并将这个对象添加到矢量中。 / p>

请注意,main必须返回int。此处的特殊规则:您不必显式返回它。因此,将main函数更改为

int main() {}

就足够了,而另外的return 0;却没有问题。

答案 1 :(得分:0)

有很多错误。

  • main必须返回一个inthttps://en.cppreference.com/w/cpp/language/main_function

  • 自变量string x将不必要地复制您的string(如果调用函数时不移动自变量)

  • 当您尝试将char的每个std::string复制到std::vector时,您的std::vector应该是std::vector<char>而不是{{ 1}}(https://en.cppreference.com/w/cpp/string/basic_string

  • 如果您确实需要使用std::vector<std::string>,则需要将std::vector<std::string>转换为char。这样做的方法有很多。以这种方式修改循环将允许以下操作:

    std::string

  • for (int i = 0; i < strlen(x.c_str()); i++) y.push_back({x[i]});还将创建一个副本。我猜您正在寻找类似vector<string> y的东西(请注意std::vector<char>&,如果您不知道这是什么意思:https://en.cppreference.com/book/intro/reference

  • 您的&循环有效(如果您的向量for的类型为y

  • 使用返回类型为std::vector<char>的函数来修改通过引用传递的参数不是现代C ++。也许您更希望返回void

  • 检查将字符串的字符复制到chars向量中的这种方式:

    std::vector<char>

  • 进行研究,使用cppreference,...