码迷,mamicode.com
首页 > 其他好文 > 详细

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。

时间:2015-01-25 15:12:56      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

  1. 方法一:使用C函数库中的函数atoi(const char *nptr),一行代码就可以解决问题,但这并不是题目所需要的解题思路;
  2. 方法二:假如我们输入的是“345”,从左到右依次遍历,第一次所要的结果是“3”,第二次所要的结果是“34”,34=3*10+4,第三次所要的结果是“345”,345=34*10+5。由此,我们可以从左到右依次遍历每一个字符,将前一次得到的结果*10+本次遍历的字符,使用一个循环就可以将一个字符串转化成一个整数。

 

  

  1. 如果字符串中的第一个字符是“-”,那么得到的是负整数。因此,需要先判断第一个字符是不是“-”,如果是,则将最后的结果乘以-1即可;
  2. 如果有非法输入,即字符串中有不在”0”~”9”之间的字符。如果碰到非法输入的字符,则直接退出转化的操作,同时返回一个布尔型的值0(输入的字符串也可能是0,为了区分,也可以单独打印一条提示语句)。
  3. 如果输入的字符串很长,则可能溢出。如果是正数溢出,则大于最大的整数,如果是负数溢出,则小于最小的整数。使用

if((result > numeric_limits<int>::max() && !isNegative) || (result < numeric_limits<int>::min() && isNegative))

来判断。溢出后也直接退出转化的操作。

 

#include <iostream>

#include <string>

#include <limits>

using namespace std;

 

bool validInput = false;//表示是非法输入

 

int strToInt(const char *str){

    //bool invalid

    bool isNegative = false;//用于判断是否是负数的标志

    long result = 0;//用于保存最后的结果

    const char *digit = str;

 

    if(digit != NULL){

        if(*digit == ‘+‘){//判断是否是正数

            //isNegative = false;//不需要重新赋值

            digit++;

        }

        else if(*digit == ‘-‘){//判断是否是负数

            isNegative = true;

            digit++;

        }

 

        while(*digit !=‘\0‘){

            if(*digit >=‘0‘ && *digit <=‘9‘){

                result = result*10 + (*digit -‘0‘);//得到一个数字

 

                if((result > numeric_limits<int>::max() && !isNegative) || (result < numeric_limits<int>::min() && isNegative)){

                    result = 0;//溢出后的处理

                    break;

                }

                digit++;

            }

            else{//遇到非法字符,停止计算,直接退出

                result = 0;

                break;

            }

        }

        if(*digit == ‘\0‘){//如果到达最后一个字符时,则是有效输入。           

            validInput = true;

 

            if(isNegative){

                result =(-1)*result;//or  result =0-result

            }      

        }

    }

    return result;

   

}

 

int main(void){

    cout<<"Enter a string:"<<endl;

    char *mystring = new char[100];

 

    cin>>mystring;

 

    cout<<"After Convert,the result is :"<<endl;

    cout<<strToInt(mystring)<<endl;

    cout<<"The status of the string is "<<validInput<<endl;

 

    delete[] mystring;//释放内存空间

 

    system("pause");

    return 0;

}

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。

标签:

原文地址:http://www.cnblogs.com/micstone/p/4248172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!