#include<stdio.h>
#include <ctype.h>
void main()
{
int atoi(char *p);
char ch[20];
printf("please enter one sentence :\n");
gets(ch);
atoi(ch);
printf("整形为:%d",atoi(ch));
printf("\n");
}
#if(1)
int atoi(char p)
{
int i,n=0,sign=1;
if(p==NULL)
{
return 0;
}
for(i=0;isspace(p[i]);i++)//isspace函数 若判断字符ch为空空格、制表符或换行符,函数返回非零值,否则返回零值。
{
sign=(p[i]=='-')?-1:1;
if(p[i]=='+'||p[i]=='-')
{
i++;
}
}
for(n=0;isdigit(p[i]);i++)//C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。
{
n=n10+(p[i]-'0');
}
return sign*n;
}
#endif
应该是访问字符数组的下标n和要存储字符串中数字的n两个变量重合了,然后一些其他细节的问题,修改如下:
#include<stdio.h>
#include <ctype.h>
int main()
{
int atoi(char *p);
char ch[20];
printf("please enter one sentence :\n");
gets(ch);
atoi(ch);
printf("整形为:%d",atoi(ch));
printf("\n");
}
#if(1)
int atoi(char *p)
{
int i,n=0,sign=1;
if(p==NULL)
{
return 0;
}
//过滤空格及确定正负
for(i=0;isspace(p[i]);i++)//isspace函数 若判断字符ch为空空格、制表符或换行符,函数返回非零值,否则返回零值。
{
sign=(p[i]=='-')?-1:1;
if(p[i]=='+'||p[i]=='-')
{
continue;
}
}
int k;
//读取字符串中的数字字符并拼接成数字n,用k代替n来访问字符数组
for(k=i;p[k]!='\0';k++)//C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。
{
if(isdigit(p[k])){ //如果是数字则累加进数字n
n=n*10+(p[k]-'0');
}
}
return sign*n; //把正负加到结果上
}
#endif