【问题标题】:Converting an Integer Array into a Number将整数数组转换为数字
【发布时间】:2012-06-27 09:33:04
【问题描述】:

认为我有一个这样的整数数组:

a[0]=60; a[1]=321; a[2]=5;

现在我想将整个数组转换成整数,例如int b在运行代码后变成603215。

怎么做?

【问题讨论】:

  • 我不得不说我从来没有想过这样做,或者看到其他人尝试这样做。对原创性的赞誉,或者选择一个对我隐藏的问题。
  • 这个类似,但比this question简单。我的解决方案适用于这个问题,但由于您不关心格式,所以stringstream 解决方案似乎更简单。

标签: c++ arrays integer


【解决方案1】:

使用std::stringstream

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss;
    int arr[] = {60, 321, 5};

    for (unsigned i = 0; i < sizeof arr / sizeof arr [0]; ++i)
        ss << arr [i];

    int result;
    ss >> result;
    std::cout << result; //603215
}

请注意,在 C++11 中,稍微丑陋的循环可以替换为:

for (int i : arr)
    ss << i;

此外,鉴于存在溢出的可能性,可以使用ss.str() 访问数字的字符串形式。为了避免溢出,使用它可能比试图将它塞进一个整数更容易。负值也应该被考虑在内,因为这只有在第一个值为负时才有效(并且有意义)。

【讨论】:

  • 非常感谢,很好的回答:))
【解决方案2】:

将所有数字连接为字符串,然后将其转换为数字

#include <string>
int b = std::stoi("603215");

【讨论】:

  • 我知道这个问题不太具体,但我想数组元素可以是任意的(直到它不会溢出整数)。硬编码字符串值不会解决这个问题。不过,该函数是字符串流的一个很好的替代开始(假设您有 C++11)。
【解决方案3】:

这个算法会起作用:

  1. 使用for循环将数组的所有整数值转换为字符串。
  2. 现在将所有字符串值附加到从索引 0 到数组长度的一个字符串。
  3. 再次将该字符串更改为整数。

【讨论】:

  • 我让你的算法在阅读时更容易理解。 FFR,编辑空间顶部有一个编号列表按钮。
【解决方案4】:
int a[] = {60, 321, 5};

int finalNumber = 0;
for (int i = 0; i < a.length; i++) {
    int num = a[i];
    if (num != 0) {
        while (num > 0) {
            finalNumber *= 10;
            num /= 10;
        }
        finalNumber += a[i];
    } else {
        finalNumber *= 10;
    }
}

finalNumber 有结果:603215

【讨论】:

  • 还有一些其他的东西,第一个是 Java->C++ 的: 1. 数组不是 C++ 中的类,并且没有 length 成员。通常最好改用std::vector,因为它提供了功能。 2.a应该是arr
  • @Kalai 也谢谢你,漂亮而聪明的答案 :))
  • @Kalai 你的代码有问题,想想 a[0]=50;一个[1]=1;一个[2]=0;那么结果应该是 5010,但你的代码会跳过 0 并显示 501。
  • @Stranger 感谢您的评论。你有很好的分析能力。我已经编辑了代码。现在,它可以工作了。
  • @Kalai 它还没有工作!!!使用 int a[] = {60, 321, 0};作为第一行,您将根本没有答案!!!
【解决方案5】:

迭代数组并将值转换为字符串。然后连接所有这些并转换回整数。

#include <string>

int a[] = {60, 321, 5};
std::string num = "";
for(auto val : a)
    num += a;
int b = std::stoi(num);

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2013-11-11
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多