1.字符串转浮点数
double atof(char s[]){
double val, power;
int exp, i, sign;
for(i = 0;isspace(s[i]);i++)
;
sign = (s[i] == -1) ? -1 : 1;
if(s[i] == "+" || s[i] == '-')
i++;
for(val = 0.0;isdigit(s[i]);i++)
val = 10.0 * val + (s[i] - '0');
if(s[i] == '.')
i++;
for(power = 1.0;isdigit(s[i]);i++){
val = 10.0 * val +(s[i] - '0');
power *= 10.0;
}
val = sign * val / power;
//分界,前后半
if(s[i] == 'e' || s[i] == 'E'){
sign = (s[++i] == '-') ? -1 : 1;
if(s[i] == '+' || s[i] == '-')
i++;
for(exp = 0;isdigit(s[i]);i++)
exp = 10 * exp + (s[i] - '0');
if(sign == 1)
while(exp-- > 0)
val *= 10;
else
while(exp-- > 0)
val /= 10;
}
return val;
}
前半部分是将例如123,12.3,-123等转为浮点数。
后半部分是将例如12.3e-4等科学计数法的字符串转为浮点数。
2.递归调用把整数转为字符串
void itoa(int n, char s[]){
static int i;
if(n / 10)
itoa(n / 10,s);
else{
i = 0;
if(n < 0)
s[i++] = '-';
}
s[i++] = abs(n) % 10 + '0';
s[i] = '\0';
}
利用除以10取余的办法,将数字一个一个转为字符,再存储。
3.递归调用把字符串顺序颠倒
//这里为了简化main中操作,将其余操作放到函数中
void reverse(char s[]){
void reverser(char s[], int i, int len);
reverser(s,0,strlen(s));
}
//把最前面的和最后面的依次调换
void reverser(char s[], int i, int len){
int c,j;
j = len - (i + 1);
if(i < j){
c = s[i];
s[i] = s[j];
s[j] = c;
reverser(s,++i,len);
}
}
核心思想就是把最前面的和最后面的字符依次调换