【问题标题】:add each int in a vector<int> to a string将 vector<int> 中的每个 int 添加到字符串
【发布时间】:2017-12-22 12:30:43
【问题描述】:
for (vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i)
    {
        int number = *i;
        char* c;
        itoa(number, c, 10);
        result += c;
    }
    std::cout << result << std::endl;

我正在尝试将“vec”中的每个 int 转换为 char 并将其添加到字符串中,但我只是得到一个编译器错误。我做错了什么?

【问题讨论】:

  • 那么,如果您遇到编译器错误,为什么您决定在您的问题中不包含您遇到的错误?此外,由于c 未初始化,char* c; itoa(number, c, 10); 无论如何都是未定义的行为。
  • 请在示例代码中包含变量的定义。这可能与此有关。

标签: c++ char int


【解决方案1】:

您可以使用 C++11 中的std::to_string

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

int main()
{
    std::vector<int> vec;
    for (int i = 0; i < 100; i++)
    {
        vec.push_back(i);
    }
    std::string result;
    for (std::vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i)
    {
        result += std::to_string(*i);
    }
    std::cout << result << std::endl;
}

【讨论】:

  • include {} 在您的for 语句中阻止标记。即使里面只有一个语句。
  • @apalomer 如果您打算让不懂 C++ 的人编辑您的 C++ 代码,这是一个很好的做法。
  • @juanchopanza“不懂C++的人”不应该编辑C++代码...来源:我见过太多可怕的事情
  • @ChristianG 没错。但许多编码指南似乎正是为这些人设计的。
  • BTW 更喜欢 cppreference.com 到那个网站。更好的资源。
【解决方案2】:

合并听起来像是std::accumulate 的工作。

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

auto main() -> int
{
  const std::vector<int> vec{ 1, 2, 3 };
  const std::string result = std::accumulate(vec.begin(), vec.end(), std::string(),
    [](const std::string& s, const int value)
    {
      return s + std::to_string(value);
    });

  std::cout << result << std::endl;
}

【讨论】:

  • 我很好奇:auto main() -&gt; intint main() 相比有什么好处?
  • 没有任何好处,只是我的噱头
【解决方案3】:

您的代码中有错误:

您使用未初始化的字符指针调用itoa()。这很糟糕,因为itoa() 需要一个有效的缓冲区!此外,itoa() 不是 c++ 标准的一部分。

最好将char* 抛在后面,使用更现代的C++ 功能,尤其是std::stringstream,它是一个字符串生成器,在转换方面非常强大(而且通常比字符串+= 运算符更快)。它通过使用&lt;&lt; 运算符(可以是字符串文字、字符串、各种数字)向其推送元素来构建字符串,它可以通过外部运算符扩展为自己的数据类型,并且它还有很多格式选项(例如位数、十六进制等),并使用 str() 方法返回其构建的字符串。

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

int main()
{
    std::vector<int> vec;
    for (int i = 0;i<100;i++)
        vec.push_back(i);
    std::stringstream ss;
    for (auto& number : vec)
        ss << number;
    std::cout << ss.str() << std::endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多