递归、字符串变数字
1.递归练习
问题:用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
等同于:顺序输出每一位。
#include<stdio.h>
void Show(int n)
{
if (n < 10)
{
printf("%d ", n);
}
else
{
Show(n / 10);
printf("%d ", n % 10);
}
}
int main()
{
Show(483);
return 0;
}
2.实现int Myatoi(const char *str);将字符串转成数字“123”->123
解题关键:
1.考虑特殊情况
2.‘1’-‘0’=1 ‘2’-‘0’=2 减去字符0
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
int Myatoi(const char* str)
{
assert(str != NULL);
if (str == NULL)
{
return 0;
}
//处理前面的空格
while (*str == ' ')
{
str++;
}
int flag = 1;
if (*str == '-')
{
flag = -1;
str++;
}
else if (*str == '+')
{
// flag = 1;
str++;
}
int tmp = 0;
while (isdigit(*str)) //字符如何变数字‘1’-‘0’=1
{
tmp = tmp*10+(*str - '0');
str++;
}
return tmp * flag;
}
int main()
{
const char *str=NULL;
int value = 0;
str = "3321aa2344";
value=Myatoi(str);
printf("%s->%d\n", str, value);
str = "-3321344";
value = Myatoi(str);
printf("%s->%d\n", str, value);
str = " 3321344";
value = Myatoi(str);
printf("%s->%d\n", str, value);
str = " 3333333333333321344"; //超出范围 需要自己改代码
value = Myatoi(str);
printf("%s->%d\n", str, value);
return 0;
}
3.实现void Myitoa(char *str,int n);将数字转成字符串123->“123”
==关键:==加上字符0