【问题标题】:how can I convert character to integer number如何将字符转换为整数
【发布时间】:2016-02-01 01:15:04
【问题描述】:

如何在不使用任何现成函数(例如 atoi();)的情况下将字符数组(字符串)更改为整数:-

 char a[5]='4534';

我要4534号,怎么弄?

【问题讨论】:

  • 不使用atoi?实现我们自己的atoi。
  • 首先,您必须以字符串开头:a[5] = "4534"。字符串用双引号括起来。
  • 只允许atoi 或任何标准功能?
  • 为什么有 2 个赞?这个问题必须有十几个重复...................................................... ..................................................... ..................................

标签: c++ c


【解决方案1】:

在不使用任何现有库的情况下,您必须:

  1. 将字符转换为数字。
  2. 将数字组合成一个数字。

字符转数字:

digit = character - '0';

组成一个数:

number = 0;
Loop:
number = number * 10 + digit;

您的函数必须检查“+”和“-”以及其他非数字字符。

【讨论】:

  • 谢谢你的回答,现在我明白该怎么做了:)
  • 如果回答有用,请点对勾。
【解决方案2】:

首先声明

 char a[5]='4534';

不会编译。我想你的意思是

 char a[5]="4534";
           ^^   ^^

把这个字符串转换成数字就很简单了。

例如

int number = 0;

for ( const char *p = a; *p >= '0' && *p <= '9'; ++p )
{
    number = 10 * number + *p - '0';
}

或者您可以跳过前导空格。

例如

int number = 0;

const char *p = s;

while ( std::isspace( ( unsigned char )*p ) ) ++p;

for ( ; *p >= '0' && *p <= '9'; ++p )
{
    number = 10 * number + *p - '0';
}

如果字符串可能包含符号“+”或“-”,那么您可以先检查第一个字符是否为符号。

【讨论】:

    【解决方案3】:

    你可以这样走

    它正在工作

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int main()
    {
    
      char a[5] = "4534";
    
      int converted = 0;
    
      int arraysize = strlen(a);
    
      int i = 0;
      for (i = 0; i < arraysize ; i++)
      {
        converted = converted *10 + a[i] - '0';
      }
    
      printf("converted= %d", converted);   
    
      return 0;
    }
    

    【讨论】:

    • 没有返回整数的pow function。可能存在浮点转换问题。更安全的方法是将之前的值乘以 10,请参阅我的答案。
    • @Thomas Matthews,你是对的,我做了更正
    【解决方案4】:

    我更喜欢使用std::atoi() 函数将字符串转换为数字数据类型。在您的示例中,您有一个 非零终止数组 "\0",因此该函数不适用于此代码。

    考虑使用 zero 终止的"strings",,例如:

    char *a = "4534";
    
    int mynumber = std::atoi( a );   // mynumber = 4534
    

    【讨论】:

    • 首先,atoi 已损坏,不应使用,除非您可以接受无法将"0" 与无效输入区分开来的事实。应该使用 C++11 函数 std::stoi 代替(在 C++11 之前,字符串流)。其次,OP 的示例被破坏了,因为'4534' 与"4534" 完全不同。第三,您的char* 应该是char const *。
    • 是的,我知道如何使用它,但不允许在我的代码中使用它。 :)
    • 请再看一下我的帖子,其中显示了 std::atoi 的使用,然后再减去它!你的第二点在我的帖子中也有解释!你能告诉我为什么它应该是一个 const char* 来演示 std::atoi() 吗?
    • @ViktorLiehr:字符串文字由 不可修改 字符组成。您不能用非const 指针指向const 对象。您甚至可能会收到一个编译器警告。并且尝试修改不可修改的东西会导致未定义的行为。
    • @ViktorLiehr:考虑一下如果字符串文字是"0" 会发生什么,然后考虑如果它是"x" 会发生什么。现在尝试编写一个atoi 程序,它对两者的响应不同。
    猜你喜欢
    • 2019-10-20
    • 2010-10-13
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多