输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)

Posted 追逐面包和牛奶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)相关的知识,希望对你有一定的参考价值。


例如输入字符串"345",则输出整数345。
-----------------------------
此题一点也不简单。不信,你就先不看一下的代码,你自己先写一份,然后再对比一下,便知道了。

1.转换的思路:每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。
这个思路用循环不难实现。
2.由于整数可能不仅仅之含有数字,还有可能以‘+‘或者‘-‘开头,表示整数的正负。
如果第一个字符是‘+‘号,则不需要做任何操作;如果第一个字符是‘-‘号,
则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
3.接着我们试着处理非法输入。由于输入的是指针,在使用指针之前,
我们要做的第一件是判断这个指针是不是为空。
如果试着去访问空指针,将不可避免地导致程序崩溃。
4.输入的字符串中可能含有不是数字的字符。
每当碰到这些非法的字符,我们就没有必要再继续转换。

最后一个需要考虑的问题是溢出问题。由于输入的数字是以字符串的形式输入,
因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。

#include<iostream>
#include<string>
using namespace std;

bool isValue = true;
int convert(string&str){
    bool isAdd = true;//用来区分字符串第一个字符是‘+‘还是‘-‘
    
    if (str.size() == 0){
        isValue = false;
        return 0;
    }
    int res = 0;
    for (int i = 0; i < str.size(); i++){
        if (i == 0){
            if (str[i] == -){
                isAdd = false;
                continue;
            }
            else if (str[i] == +){
                continue;
            }
            
        }
        if (str[i]>9 || str[i] < 0){
            isValue = false;
            return 0;
        }
        res = 10 * res + str[i] - 0;
    }
    if (res>INT_MAX || res < INT_MIN){
        isValue = false;
        return 0;
    }
    res = isAdd == 1 ? res * 1 : res*(-1);
    return res;
}

 

以上是关于输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)的主要内容,如果未能解决你的问题,请参考以下文章

程序员面试50题—把字符串转换成整数[算法]

用java语言编写程序:输入一个长度不多于6位的表示整数的字符串,把它转换成整型的数,加一输出;把

5-2?字符串转换成十进制整数

[PTA]习题7-8 字符串转换成十进制整数

C语言:用递归法讲一个整数n转换成字符串。例如输入483,应输出字符串“483”,n的位数不定,为任意位数整

C语言:输入一个十六进制字符串,将其转换成为对应的整数并输出转换结果。