编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)
例如:“12“ 返回12
“-123“ 返回-123
例如:“12“ 返回12
“-123“ 返回-123
函数原型:int char_int(char *str){}
</pre><pre name="code" class="cpp">#include<stdio.h>
#include<assert.h>
#include<string.h>
#include <ctype.h>
int char_int1(char *str)//没考虑到开头空字符,或tab键
{
int ret=0,i=1;
if(!(48<=*str++<=57)))
return 0;
if(*str=='-')
{
i=-1;
str++;
}
while(*str)
{
if(!(48<=*str<=57)))
return 0;
ret= ret*10+*str - '0';
str++;
}
return i*ret;
}
int char_int2(char *str)//定点整数数字字符串转化为所对应的数字
{
//用一个字符指针保存字符串 str 的首地址
char *q=str;
int ret=0;
if('-'==*str)
{
if(!(48<=*++str<=57));//assert(!(48<=*++str<=57))断言,当()中为假时,报错
return 0;
char *p=str;
for(int i=0;i<strlen(p);i++)
{
ret=ret*10+p[i]-'0';
}
return -ret;
}
else
{
if(!(48<=*str++<=57));// assert(!(48<=*str++<=57))断言,当()中为假时,报错
return 0;
for(int i=0;i<strlen(q);i++)
{
ret=ret*10+q[i]-'0';
}
return ret; }
}
int my_atoi(char *str) //atoi()函数在math.h中,自己实现的myh_atoi()
{
int flag = 1;
int value = 0;
int num = 0;
int count = 0;
//判断空白字符
while(isspace(*str))//isspace(),判断空字符函数,include <ctype.h>
{
str++;
}
//判断正负号
if(*str == '-')
{
flag = -1;
str++;
}
if(*str == '+')
{
str++;
}
//isdigtil(),判断是不是数字的函数,include <ctype.h>
while(*str != '\0')
{
value = value * 10 + (*str -'0');
str++;
}
return flag * value;
}
int main()
{
char *a="12d34";//char *a="1234" 或 char*a="-1234"
int s=char_int1 (a);//int s=char_int2(a);
printf("字符串 %s",a);
printf("\n数字 %d\n",s);
char *b=" 1234";
int t=my_aoi(b);
printf("字符串 %s",b);
printf("\n数字 %d\n",t);
return 0;
}