一、将字符形式的数字转化为整型数字
/* 问题描述:实现函数 int atoi(const char *str)的功能
*函数atoi将字符形式的数字转换为整型。
*例如:输入:若干空格或tab或换行符 123g,123.46,-123,ab
* 输出:123,123,-123,0。即若首个非空字符为非法字符即不是数字字符,则返回0.
*/
#include <stdio.h>
static int myatoi(const char *str);
int main()
{
char a[10];
printf("请输入字符串\n");
scanf("%s",a);
printf("数值形式为:%d\n",myatoi(a));
}
static int myatoi(const char* str)
{
int result = 0;
int sign = 0;//标记输入的数是否是负数
while (*str==' ' || *str=='\t' || *str=='\n')//忽略开始的空格
++str;
if (*str=='-')//负数
{
sign = 1;
++str;
}
else if (*str=='+')
{
++str;
}
while (*str>='0' && *str<='9')
{
result = result*10 + *str - '0';
++str;
}
if (sign)
result *= -1;
return result;
}
二、将int型整数转换为字符串形式的数字
#include<stdio.h>
void myitoa(int num,char str[] );
void main()
{
char str[25];
int num;
printf("请输入要转换的整数:");
scanf("%d",&num);
myitoa(num,str);
printf("整数%d转换成字符串为:%s\n",num,str);
}
void myitoa(int num,char str[] )
{/*将整数转化为字符串数。*/
int sign = num,i = 0,j = 0;
char temp[25];
if(sign<0)//判断是否是一个负数
{
num = -num;
}
do//若num=0也可执行一次,,使用while循环就不行了
{
temp[i] = num%10+'0'; //整数加'0'会隐性转化为char型的数
num/=10;
i++;
}while(num>0);
if(sign<0)
{
temp[i++] = '-';//对于负数,要加以负号
}
temp[i] = '\0';//添加字符串结束标志
i--;
while(i>=0)//反向操作:刚刚转换的字符串是逆序的,必须把它反转过来
{
str[j] = temp[i];
j++;
i--;
}
str[j] = '\0';
}