本文主要是介绍实现字符串到数字的转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
嗯,今天看了JUly的编程艺术系列的文章,讲的很好,这个字符串到数字的转换程序写的很全面,考虑了空指针,非法输入,溢出问题等。非常好,学习了,现在把这个程序贴在这里,供以后需要时使用。
另外一点,如果把n定义成长整型,最后返回时系统会自动转换成整型, int类型的数据范围是-2147483648~2147483647,也就是负二十多亿到正的二十多亿,带符号十进制数11位,无符号12位。因此我给字符串动态分配了12位大小的char型长度。
// StrToInt(1).cpp : 定义控制台应用程序的入口点。
/*
<span style="white-space:pre"> </span>@mishidemudong
<span style="white-space:pre"> </span>@2015-5-27
*/
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<string>using namespace std;int StrToInt(const char* str)
{static const int MAX_INT = (int)((unsigned)~0 >> 1);static const int MIN_INT = -(int)((unsigned)~0 >> 1)-1 ;unsigned int n = 0;//判断是否输入为空if (str == NULL){return 0;}//处理空格while (isspace(*str))++str;//处理正负int sign = 1;if (*str == '+' || *str == '-'){if (*str == '-')sign = -1;++str;}//确定是数字后才执行循环while (isdigit(*str)){//处理溢出int c = *str - '0';if (sign > 0 && (n > MAX_INT / 10 || (n == MAX_INT / 10 && c > MAX_INT % 10))){n = MAX_INT;break;}else if (sign < 0 && (n >(unsigned)MIN_INT / 10 || (n == (unsigned)MIN_INT / 10 && c > (unsigned)MIN_INT % 10))){n = MIN_INT;break;}//把之前得到的数字乘以10,再加上当前字符表示的数字。n = n * 10 + c;++str;}if (sign==-1)n = 0-n;//vs2013这里会出现点问题:一元负运算符应用于无符号类型,结果仍为无符号类return n; //所以我改了一下
}int _tmain(int argc, _TCHAR* argv[])
{char *str;int Trans_Num = 0;str = (char *)malloc(12*sizeof(char));gets_s(str,12);Trans_Num=StrToInt(str);printf("%d", Trans_Num);return 0;
}
这篇关于实现字符串到数字的转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!