【问题标题】:How to convert integer to string, preserving leading zeroes in C++ ? (Using to_string)如何将整数转换为字符串,在 C++ 中保留前导零? (使用 to_string)
【发布时间】:2021-12-16 23:15:55
【问题描述】:

当我试图通过 to_string 函数将给定的整数转换为字符串时,它只是省略了整数的前导零。

为什么?以及如何克服这个问题?

#include<iostream>

using namespace std;

int main(){
int n;
cin >> n;

string s = to_string(n);

cout << s;
}

【问题讨论】:

  • 将其保存为字符串。整数没有“前导零”(或者可能有无限多个)。
  • 但我必须在我的字符串中取零。那我该怎么办?
  • 将其读入std::string 变量而不是int

标签: c++ type-conversion


【解决方案1】:

在 C++20 中,当您的编译器支持 std::format 时,您可以使用它。所以就目前而言,没有一种方便的方法可以将字符串中的数字转换为格式化输出。

This answer 已经展示了我通常喜欢的 iostream 的解决方案,但是对于格式化,我认为它过于冗长,并且 iostream 会记住一些操作符,而其他操作符则不会,所以在这种情况下,我建议使用C 风格std::snprintf(在 C++ 中可能有点争议)。格式也需要一些学习,但更简洁。字符串被写入调用者必须提供的 char 数组中,然后必须将结果复制到字符串中。

int inp = 28;
char result[10];
int len = std::snprintf(result, 9, "%08d", inp);
std::string str_res(result, len);

【讨论】:

    【解决方案2】:

    整数没有前导零。

    如果您想要数字的特定位数,前导零,您需要使用 I/O 操纵器,如 set::setwstd::setfill

    std::cout << std::setw(8) << std::setfill('0') << n << '\n';
    

    如果n 的值不是八位,则将打印(至少)八位数字,前导零。


    如果你想在你的程序中存储一个带有前导零的“数字”,例如电话号码或类似的,那么你需要另一种数据类型而不是纯整数(如前所述t 有前导零)。

    最常见的是字符串 (std::string)。

    【讨论】:

    • 意识到如果是8位或更多位,就不会有任何前导0,所以可以考虑先输出一个'0',然后setw(7)/setfill ...跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多