atoi这个函数的实现要考虑正负还有字母等情况
下面是字符串转换成整型数
#include <stdio.h>
#include <string.h>
int my_atio(char *String);
int main()
{
char String[100];
int num;
printf("please input a string:\n");
scanf("%s",String);
num =my_atio(String);
printf("result = %d\n",num);
return 0;
}
int my_atio(char *String)
{
int num = 0;
int flag = 1;
if(*String == '-')//判断正负号
{
flag = -1;
String++;
}
while(*String != '\0' && *String >= '0' && *String <= '9')//判断是否为0到9
{
num = num * 10 + (*String - '0');//每次乘十就是向前一位再加上数字(用‘3’ - ‘0’算出所代表的数字)
String++;
}
return num * flag;
}
下面是将整型数转换成字符串,使用倒叙的方法。再前后换顺序
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1024
char * int2str(int num)
{
char temp;
static char result[MAX_SIZE] = {0};
int i = 0;
int len = 0;
while(num != 0)
{
result[i] = (num % 10) + '0' ;//算出字符(用3 + ‘0’来算出字符‘3’)
num = num / 10;
i++;
}
result[i] = '\0';
len = strlen(result);
for(i = 0; i < len / 2; i++) //前后换顺序
{
temp = result[i];
result[i] = result[len - 1 - i];
result[len - 1 - i] = temp;
}
return result;
}
int main()
{
int num;
printf("Please input num:\n");
scanf("%d",&num);
char *result = int2str(num);
printf("result = %s\n",result);
return 0;
}
下面是不前后换顺序的方法,这个方法时间效率慢些。
#include <stdio.h>
void my_atoi(int num,char *src)
{
int tmp;
int i;
int n;
if(num < 0)//判断正负
{
*src = '-';
src++;
num = -num;
}
while(1)
{
tmp = num;
i = 0;
n = 1;
while(tmp / 10)//用循环找出第一个数字
{
tmp = tmp / 10;
i++;
}
*src = tmp + '0';//算出其对应的字符
src++;
if(i == 0)//当到最后一位时break
{
break;
}
for(;i > 0;i--)//去掉第一位
{
n = n * 10;
}
num = num % n;
}
*src = '\0';
}
int main()
{
int num;
char src[100];
scanf("%d",&num);
my_atoi(num,src);
printf("the result = %s\n",src);
return 0;
}
一个在努力中的未来程序员,如果有更好的想法,欢迎评论。
|