// 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; }
标签:return,数字,temp,int,sign,空格,str,字符串 From: https://www.cnblogs.com/8335IT/p/17015392.html