【问题标题】:How can I append two array elements (int) into one array element (int)?如何将两个数组元素 (int) 附加到一个数组元素 (int) 中?
【发布时间】:2014-03-29 02:51:55
【问题描述】:

我正在尝试获取整数数组的两个元素,并将它们按顺序附加到另一个数组元素中,但只有一个。

例如。 int i[14] 的所有元素都用数字填充。

我希望将 i[1] 和 i[2] 存储到一个元素中:temp[0]。

假设 i[1] = 123 和 i[2] = 456,我想要 temp[0] = 123456。

我尝试使用 strcat(),但它只适用于 char 类型。

有什么建议吗?

编辑 - 我正在使用 C,而不是 C++。对不起。

【问题讨论】:

  • temp[0] = std::stoi(std::to_string(i[1]) + std::to_string(i[2])); 基本上,将两者都转换为字符串,连接字符串,然后将连接的字符串转换回整数类型。
  • 使用 sprintf(),然后 strcat() 两个 now-strings 并转换回 int 怎么样?

标签: c arrays


【解决方案1】:

不需要使用字符串函数,你可以用数学来做,反正效率更高:

temp[0] = pow(10, int(log10(i[2]))) * i[1] + i[2]

我们的想法是计算 i[2] 中有多少小数位(如果 i[2] 为 456,则为 3),将 10 乘以该次方得到 1000,这是适用于 i[1 的乘法因子],所以结果是这样的:

1000 * 123 + 456 == 123456

【讨论】:

    【解决方案2】:

    在您的示例中:temp[0] = i[1] * 1000 + i[2];

    一般来说,您可能希望使用任意长度的i[2]。所以你需要乘以 10 的正确幂。

    这是一种解决方法:

    int output = i[1];
    for ( int x = i[2]; x; x /= 10 )
        output *= 10;
    output += i[2];
    

    执行此操作时,请记住 int 最多只能保存 INT_MAX 的值(通常为 2147483647)。如果你溢出它,那么行为是未定义的。考虑改用unsigned long long,并添加溢出检查。

    【讨论】:

    • 谢谢你,但我觉得你应该听听关于我需要做什么的完整故事。我需要读入一个二进制文件——没问题。它包含一个 4 字节长的整数。文件的下一个序列包含未知数量的浮点数,每个 8 字节长。我已将数据(一次 4 个字节)读入一个数组。这样做时,我不小心将每个浮动“拆分”成两半。现在我正在尝试将花车重新缝合在一起。最终目标是按顺序显示每个数字。
    • 嗯,这与您的问题完全不同。发布一个实际提出的新问题!
    • 对不起!好的,我会这样做的。
    • 好的。还要在其中包含从文件中读取数据的实际代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多