在向量中添加每个int 到一个字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在向量中添加每个int 到一个字符串相关的知识,希望对你有一定的参考价值。

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 ++ 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;
}
另一答案

结合听起来像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;
}
另一答案

您的代码中存在错误:

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

更好的做法是留下char*并使用更现代的C ++特性,特别是std::stringstream,它是一个字符串构建器,它在转换方面很强大(并且通常比字符串+ =运算符更快)。它通过使用<<运算符(可以是字符串文字,字符串,各种数字)将元素推送到它来构建字符串,它可以通过外部运算符扩展为自己的数据类型,它还有很多格式化选项(例如,位数,十六进制等),并使用方法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;
}

以上是关于在向量中添加每个int 到一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

引用向量的部分片段?

为啥我的代码没有将每个对象都添加到向量中?

如何将字符串添加到 C++ 中无序映射中的字符串向量

如何管理在每个 git 版本中添加私有代码片段?

如何在带有向量作为值类型的地图中添加值?

如何在字符串向量中指向 const int?