c++ - 将字符串转换为整数数组?

标签 c++

我是 C++ 的初学者,无法理解这一点。正如问题所说,如果我有一个字符串(一个数字),我如何将每个数字转换为一个整数并将每个数字放入一个整数数组中?

这是我的尝试:

std::string stringNumber = "123456789"; // this number will be very large

int intNumber[stringNumber.length()];

for (int i = 0; i < stringNumber.length(); i++) 
{
    intNumber[i] = std::atoi(stringNumber[i]);
    std::cout << intNumber[i] << std::endl;
}

最佳答案

对于大部分预构建的解决方案,我会使用 vector 和 std::transform。这个想法是遍历每个字符并将其整数形式添加到 vector 中:( see full sample )

std::string s = "1357924680";
std::vector<int> ints;
ints.reserve(s.size()); //to save on memory reallocations, thanks Nawaz
std::transform(std::begin(s), std::end(s), std::back_inserter(ints),
    [](char c) {
        return c - '0';
    }
);

这样做是从字符串的开头到结尾循环,获取每个字符,并将它的值减去 '0' ('5' - '0 ' 将是 5) 到 vector 的末尾,为您留下一个等价整数的 vector 。最重要的是,它不会重新发明轮子!

它还解决了您遇到的两个问题:

  1. 它使用 std::vector 而不是可变长度数组 (VLA)。后者是非标准的,因此如果您需要运行时大小的数组,则首选 vector 。

  2. 您使用 atoi,这本身就很糟糕,因为它在错误时返回 0,无法确定结果是否为 0 或是否存在错误。它还需要一个字符串,而不是单个字符。相反,它会找到 '0' 和字符之间的距离,这是我们需要的整数。

为了增加一层安全性,您可以使用 isdigit 来检查字符是否为数字。如果不是,则引发某种错误(如异常),或者以其他方式处理它。这可确保您的 ints vector 中的数字介于 0 到 9 之间,并且您不会以 25 之类的数字结尾。

关于c++ - 将字符串转换为整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006389/

相关文章:

C++ std::cout 不在字符串中打印\n

c++ - "variable tracking"占用了我的编译时间!

c++ - 部分特化消歧优先链的更好模式?

c++ - 如何在带有背景图像的小部件上制作不可见按钮?

c++ - 未在客户端 Winsock 中接收到完整数据

c++ - 使用函数指针?

c++ - Apple Blocks 与 C++11 Lambdas

c++ - 变量类型 global、static、local 和 auto

c++ - 如何从类对象返回值?

c++ - 如何使用 windbg "dt"命令从命名空间污染的内存转储中获取信息