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;
我试图转换&#34; vec&#34;中的每个int。到一个字符并将其添加到字符串但我只是得到编译器错误。我做错了什么?
答案 0 :(得分:4)
您可以使用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;
}
答案 1 :(得分:1)
将声音组合成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;
}
答案 2 :(得分:0)
您的代码中存在错误:
使用非初始化的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;
}