请告诉我这种将字符串字符映射到向量的方法有什么问题。
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
答案 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
必须返回一个int
:https://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,...