/*
字符串转换为整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。分析:此题看起来,比较简单,每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。这个思路用循环不难实现。然其背后却隐藏着不少陷阱,正如zhedahht 所说,有以下几点需要你注意:
1、由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
2、如果使用的是指针的话,在使用指针之前,我们要做的第一件是判断这个指针是不是为空。如果试着去访问空指针,将不可避免地导致程序崩溃(此第2点在下面的程序不需注意,因为没有用到指针)。
3、输入的字符串中可能含有不是数字的字符。
每当碰到这些非法的字符,我们就没有必要再继续转换。
4、溢出问题。由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。
总结以上四点,代码可以如下编写
*/
#include<stdio.h>
#include <string.h>
void str_2_int(char *p)
{
int len = strlen(p);
if(len<=0)
{
return;
}
int sym = 1;//'+'为1
int pos =0;
if(p[0]=='+')
{
pos ++;
sym = 1;
}
else if(p[0]=='-')
{
pos ++;
sym = -1;
}
int sum = 0;
int i = 0;
for(i=pos;i<len;i++)
{
if(p[i]>'9'&&p[i]<'0')/*其他字符*/
{
return ;
}
sum = sum*10+p[i]-'0';
if(sum<0) /*溢出*/
{
return;
}
}
if(p[0]=='-')
{
sum = sum*sym;
}
printf("%d",sum);
}
int main()
{
char *str = "-1024";
str_2_int(str);
getchar();
return 0;
}
OJ 系列之字符串转换为整数
最新推荐文章于 2023-03-07 18:09:39 发布