【问题标题】:How to convert an integer to a character in C++如何在 C++ 中将整数转换为字符
【发布时间】:2021-10-22 18:59:42
【问题描述】:

假设我有一个整数,我想将它转换为一个字符?在 C++ 中可以使用或应该使用哪些方法?例如,参考下面给出的代码

      #include <bits/stdc++.h>
      using namespace std;
      int main
        {
            int i = 1;
           // Say I want to convert 1 to a char  '1';
           // How do I achieve the following in C++
        }

【问题讨论】:

  • 只要1 + '0'
  • char c = '0' + i;
  • 为什么是rcpp 标签?和never include &lt;bits/stdc++.h&gt;。此外,对于简单的示例,它可能是橡木味的,但否则using namespace std;a bad habit
  • 至于您的问题,C++ 规范规定所有数字必须连续编码。也就是说,'2' 必须恰好比 '1' 大一,而 '1' 又必须比 '0' 大一。由此可以推断,普通算术(加法和减法)可用于从一个数字到其对应的字符,或相反。
  • 顺便说一下,数字的“连续”只为数字指定。它不能可靠地或便携地用于其他任何事情。

标签: c++ type-conversion char integer


【解决方案1】:
char c = digit + '0' ;

它会完成你的工作。

【讨论】:

    【解决方案2】:

    你可以使用数组,应该很容易理解:

    if (i >= 0 && i <= 9) {
        char digits[] = "0123456789";
        char c = digits[i];
    

    或者您可以使用稍微难以理解的加法。它依赖于(保证的)数字符号在字符编码中是连续的细节:

    if (i >= 0 && i <= 9) {
        char c = i + '0';
    

    【讨论】:

    • C++规范实际上要求“contiguousnes”。
    • @Someprogrammerdude 确实。但不一定凭直觉就知道。
    • 断言与if 语句相同的条件?您一定使用过一些严重损坏的编译器。
    • @PeteBecker Nah,我只是改变了主意,用 if 替换了断言,但在第二个 sn-p 上犯了一个错误。
    【解决方案3】:

    一个安全的方法是使用 std::stoi(), https://en.cppreference.com/w/cpp/string/basic_string/stol

    您拥有使用安全字符串类型 (std::string) 的所有好处, 当输入错误时,stoi 会抛出异常。

    #include <string>
    
    int main()
    {
        std::string txt("123");
        auto value = std::stoi(txt);
    }
    

    也尽量不要使用#include https://stackoverflow.com/Questions/31816095/Why-Should-I-Not-Include-Bits-Stdc-H.

    【讨论】:

    • 嗯,问题是关于将整数转换为字符,而不是将字符串转换为整数。
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多