字符串转换成数字

算法不难,重点要注意的细节:

  • 判断输入是否为空
  • 如果字符串的第一个字符为 - ,最终得到的整数必为负整数
  • 输入的字符中不能包含非数字的字符
  • 输入的字符串不能太长,转成整数后会导致溢出
    溢出的处理:
    1.定义MaxInt和MinInt,n表示当前转化后的数,c表示当前要处理的数字,设置sign值来表示当前是正或负;
    2.为正时,由两种情况:

a.如果n>MaxInt/10,return MaxInt;
b.如果n==MaxInt/10,如果c>MaxInt%10, return MaxInt;

基本算法如下:

    static int MaxInt=(int)(~0>>1);
    static int MinInt=-(int)(~0>>1)-1;
     static void StringToInt(char[] input){
         if (input.length==0){
             //  return 0;'
             System.out.println("字符串为空!");
             return;
         }
        int sign=0;
        int n=0;
         if (input[0]=='-'){
             sign=-1;
         }
         if (sign<0){
             for (int j=0;j<input.length-1;j++){
                 input[j]=input[j+1];
             }
         }
        for (int i=0;i<input.length;i++){

            while ((input[i]-'0')<9&&(input[i]-'0'>=0)){
                int c=input[i]-'0';
                if (sign>0&& n>(MaxInt/10)){
                    n=MaxInt;
                    break;
                }else if (sign>0&&n==MaxInt&&c>(MaxInt%10)){
                    n=MaxInt;
                    break;
                }else if (sign<0&&((n>MaxInt/10)||(n==MaxInt/10&&c>MaxInt%10))){
                    n=MinInt;
                    break;
                }
                n=n*10+c;
            }

        }
         System.out.println(n);
       // return sign>0?n:-n;}

另一个思路:
将字符串转成char数组后,将其中数字提取到int数组a中去,并将MaxInt转成int数组b,首先根据输入数组的长度判断是否超出MaxInt的长度,超过 则越界;a.length==b.length时,再从高位开始进行比较,if(a[i]>b[i]) 溢出;若a.length<b.length,明显不会溢出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容