[プログラマー面接問題ベスト100題]17.文字列を整数に変換する


タイトル
整数を表す文字列を入力し、その文字列を整数に変換して出力します.例えば、文字列「345」を入力すると、整数345が出力される.
ぶんせき
この問題は難しくないが、C/C++言語を学んだことがあると基本的な機能を実現するのが一般的だが、プログラマーによってこの問題に書かれたコードには大きな違いがあり、プログラマーの思考とプログラミング習慣をよく反応させることができるため、マイクロソフトを含む多くの会社で試験問題として使われていると言える.読者は下を見る前に自分でコードを書いてから、自分が書いたコードと下の参考コードの違いを比較することをお勧めします.(1)正負の問題:(1)整数は数字だけでなく、「+」または「」で始まる可能性があるため、整数の正負を表す.そのため、この文字列の最初の文字を特別に処理する必要があります.最初の文字が'+'番号の場合、何もする必要はありません.最初の文字が'-'番号であれば、この整数は負数であることを示し、最後に得られた数値を負数にします.(2)不正文字問題:入力された文字列に数字以外の文字が含まれている可能性があります.これらの不正な文字に遭遇するたびに、変換を続ける必要はありません.(3)オーバーフロー問題:入力された数字は文字列で入力されるため、大きな数値変換を入力すると表示できる最大の整数を超えてオーバーフローする可能性がある.
コード#コード#
/*--------------------------------------------- *   :2015-02-11 *   :SJF0115 *   : 17.          *   :     100  *   : -----------------------------------------------*/
#include <iostream>
#include <climits>
using namespace std;

class Solution {
public:
    bool StrToInt(string str,int& num){
        int size = str.size();
        if(size <= 0){
            return false;
        }//if
        //   
        int index = 0;
        bool positive = true;
        if(str[index] == '-'){
            positive = false;
            ++index;
        }//if
        else if(str[index] == '+'){
            ++index;
        }//else
        long long result = 0;
        for(int i = index;i < size;++i){
            //          
            if(str[i] < '0' || str[i] > '9'){
                cout<<"    "<<endl;
                return false;
            }//if
            result = result * 10 + str[i] - '0';
            //       
            if(result > INT_MAX){
                cout<<"  "<<endl;
                return false;
            }//if
        }//for
        num = positive == false ? (-1 * result) : result;
        return true;
    }
};

int main() {
    Solution solution;
    string str("-122222222222222");
    int num = 0;
    if(solution.StrToInt(str,num)){
        cout<<num<<endl;
    }//if
    else{
        cout<<"     "<<endl;
    }
}