• 字符串转换为整数


    题目:

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

    思路:

    1.每扫描到一个字符,我们把在之前计算得到的值乘以10再加上当前字符表示的数字值。

    2.由于整数字符串中可能不仅仅含有数字,还有可能以'+'或者'-'开头,表示整数的正负,如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。

    3.输入的字符串中可能含有不是数字的字符,每当碰到这些非法的字符,我们就没有必要再继续转换。

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

    总之结果算法的值应当尽量要和C运行时库中的atoi()函数计算的结果要一样。

    代码如下:

     1 #include <limits> 
     2 #include <iostream>
     3 using namespace std;
     4 
     5 bool noExcpetion = false;
     6 int StrToInt(const char* str)
     7 {
     8     _int64 num = 0;
     9     if(str != NULL)
    10     {
    11         const char* digit = str;
    12         // the first char in the string maybe '+' or '-'
    13         bool minus = false;
    14         if(*digit == '+')
    15         {
    16             digit++;
    17         }
    18         else if(*digit == '-')
    19         {
    20             digit++;
    21             minus = true;
    22         }
    23         // the remaining chars in the string
    24         while(*digit != '')
    25         {
    26             if(*digit >= '0' && *digit <= '9')
    27             {
    28                 num = num * 10 + (*digit - '0');
    29                 // overflow 
    30                 if(num > numeric_limits<int>::max())
    31                 {
    32                     num = 0;
    33                     break;
    34                 }
    35                 digit ++;
    36             }
    37             // if the char is not a digit, invalid input
    38             else
    39             {
    40                 num = 0;
    41                 break;
    42             }
    43         }
    44         if(*digit == '')
    45         {
    46             noExcpetion = true;
    47             if(minus)
    48             {
    49                 num = 0 - num;
    50             }
    51         }
    52     }
    53     return static_cast<int>(num);
    54 }
    55 
    56 void main()
    57 {
    58     printf("The result is %d
    ", StrToInt("00000000000222222222"));
    59     if(!noExcpetion)
    60     {
    61         printf("Input Error! The value was set to be zreo!
    ");
    62     }
    63 }
  • 相关阅读:
    python学习笔记day08 文件功能详解
    python学习笔记day08 文件操作
    python学习笔记day07 小结
    python学习笔记day07 集合
    python学习笔记day06 购物车实现
    python学习笔记 day06 小知识点总结
    python学习笔记day01_03python 发展历史
    python学习笔记 day06
    python学习笔记 day05 习题讲解
    PAT L2-002 链表去重
  • 原文地址:https://www.cnblogs.com/xiaoxu1st/p/3734589.html
Copyright © 2020-2023  润新知