将 vector<char> 作为参数,然后转换为字符串

Posted

技术标签:

【中文标题】将 vector<char> 作为参数,然后转换为字符串【英文标题】:Taking a vector<char> as a parameter and then converting to string 【发布时间】:2014-04-10 22:32:27 【问题描述】:
void conversionToString(vector<char>& x) 
    string s(x.begin(), x.end());
    cout << s;

int main() 
    vector<char> test('a', 'b', 'c');
    conversionToString(test);
    return 0;

我正在尝试获取一个字符串并将其转换为 char 向量。在这个示例中,我只是在做一个简单的测试,但在我的实际项目中,我计划接受用户输入并从向量和字符串来回转换。使用在线编译,我收到错误消息:

main.cpp:在函数“int main()”中: main.cpp:11:36: 错误:没有匹配函数调用‘std::vector::vector(char, char, char)’ 向量测试('a', 'b', 'c');

我希望得到一些建议,不仅是修复这个方法,还有这个方法的功能。

【问题讨论】:

【参考方案1】:

您的向量初始化错误。你需要

vector<char> test'a', 'b', 'c';

关于方法的功能,我认为转换没有多大意义。您可以打印向量的元素:

for (auto c : test)

  std::cout << c;

【讨论】:

当然,谢谢。我需要将其转换为向量,以便可以以反向波兰表示法处理字符串 - 我在下面的另一个答案中提供了更多详细信息。 @user3521441 我仍然不明白你为什么需要转换。 您的建议是什么?将复杂的用户输入作为字符串并转换为 vector 然后反向波兰表示法对我来说似乎是处理复杂计算最有效的方法 @user3521441 我可能会跳过到矢量部分的转换。 我如何能够在单个字符串的表单中处理多个计算的简化?【参考方案2】:

向量的初始化程序应如下所示(仅限 C++11):

vector<char> test'a', 'b', 'c';

一般来说,您是否应该将“从向量来回转换为字符串”是值得怀疑的 - 为什么要这样做?

【讨论】:

这是正确的:他使用了错误的构造函数。另外,你提出了一个好问题:我猜他想逐个字符地将用户输入读取到vector&lt;char&gt;,将其转换为string,然后用它做一些事情。 我们正在努力创建一个将用户输入作为字符串的功能计算器。从那里我将该字符串转换为向量。用户输入将类似于“1+3-7*8”,然后,一旦进入向量,它将被转换为“反向波兰表示法”。计算完成后,需要将其作为最终答案中的字符串返回到控制台。有没有更好的方法来做到这一点? 在学校项目的背景下(听起来像),这很好。可能有更好的方法来做到这一点,你可以避免一些副本,但你很快就会做到这一点。暂时不用担心这个。 是的,它是大学 2 部分编程课程 (java -> c++) 中的第二个。这种情况是一个处理很多情况的小组项目【参考方案3】:

如果您使用的是 C++11,则可以使用带有 vector&lt;char&gt; 的初始化列表:

vector<char> test'a', 'b', 'c';

如果您不使用 C++11,则必须以缓慢的方式执行此操作:

vector<char> test;
test.push_back('a');
test.push_back('b');
test.push_back('c');

【讨论】:

【参考方案4】:

您正在使用函数中已经存在的字符向量。请改写你的问题。如果你想获取一个 std::string 并返回 std::vector,这里有一个函数可以做到:

std::vector<char> StringToChar(std::string str)

    std::vector<char> charVector;
    for (int i = 0; i < str.size(); ++i)
    
        charVector.push_back(str.at(i));
    

    return charVector;

【讨论】:

只要std::vector&lt;char&gt; v(str.begin(), str.end()); 就可以而且效率更高。 @juanchopanza 好的,但这并不意味着我的解决方案不能胜任。所以请投票。

以上是关于将 vector<char> 作为参数,然后转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

vector 对象作为函数参数时的初始化

用 std::vector<std::string> 替换命令行参数 int argc 和 char** argv

以行和列的形式访问 vector<vector<char> > 元素

将 vector<char> 传递给指针 char*

如何将 unsigned char[] 转换为 std::vector<unsigned char>

(C++)将string型vector中的元素复制到char型数组中。。出错!