字符串转数字

// ConsoleA.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<string>
using namespace std;
//ascii 0-9:48~57
//A :65
//a:97
//空格不等于\0
//单引号的空格和双引号的空格不一样,单引号的空格是字符,双引号的空格是一个字符串(里边有一个空格一个\0)

//定义一个函数,实现字符串转换成整数
//• 在转换结果溢出时返回特定值,这里是最大 / 最小整数
//• 允许数字以正负号(+-)开头
//• 能够排除首部的空格,从第一个非空字符开始计算
//• 遇到非法字符便停止转换,返回当前已经转换的值,如果开头就是非 法字符则返回0

 

int  convert(string str )
{
    if (str.empty())//空字符串 ""
    {
        return 0;
    }
    int  sign;
    const char* temp = str.c_str();
    int len = strlen(temp);//遇到\0结束;
    int64_t sum = 0;//这样才能装得下,比MAX_INT,MIN_INT大的数,才能判断溢出
    
    int i = 0;
    while (temp[i] == ' '&& i < len)
    {
        i++;
    }
    if (temp[i] == '+' || temp[i] == '-')
    {
        sign = temp[i] == '+' ? 1 : -1;
        i++;
    }
    while (temp[i] >= '0' &&temp[i] <= '9' && i < len)
    {
        sum = sum * 10 +( temp[i]-'0');
        if (sum > INT32_MAX || sum < INT32_MIN)
        {
            return sign == 1 ? INT32_MAX : INT32_MIN;
        }
        i++;
    }
    
    return (int)(sum*sign);

}
int main()
{
    string str = "   -1239shdkh99";
    int result = convert(str);
    printf("result:%d",result);
    return 0;
}

 

posted on 2022-12-30 17:14  邗影  阅读(110)  评论(0编辑  收藏  举报

导航