首先是atoi的实现,它的功能是将字符串转化为整数。
#include <stdio.h>
#include <ctype.h>
/* atoi : convert s to integer; version 2*/
int atoi(char s[]){
int i, n, sign;
for (i = 0; isspace(s[i]); i ++) {
// do nothing
}
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '-' || s[i] == '+') {
i ++;
}
for ( n = 0; isdigit(s[i]); i ++) {
n = 10 * n + (s[i] - '0');
}
return sign * n;
}
int main(){
char a[] = "1132";
printf("%d\n", atoi(a));
return 0;
}
然后是itoa的实现,它的功能是将整数转化为字符串。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void reverse(char s[]);
/*itoa : convert n to characters in s*/
void itoa(int n, char s[]){
int i, sign;
if((sign = n) < 0){//记录符号
n = -n; //使n变为正数
}
i = 0;
do {//生成的字符是反序的
s[i ++] = n % 10 + '0';
} while((n /= 10) > 0);
if (sign < 0) {
s[i ++] = '-';
}
s[i] = '\0';
reverse(s);
}
void reverse(char s[]){
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j ;i ++, j --) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
int main(){
int n = 235;
char s[] = "000";
itoa(n, s);
printf("%s\n", s);
return 0;
}
最后是atof的实现,它的功能是将字符串转化为浮点数:
#include <stdio.h>
#include <ctype.h>
/* atof : convert string s to double*/
double atof(char s[]){
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); i ++) {/*skip white space*/
// do nothing
}
sign = (s[i] == '-') ? -1 : 1;
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 = power * 10.0;
}
return sign * val / power;
}
/*getline : get line into s, return length */
int getline(char s[], int lim){
int c, i ;
i = 0;
while ( --lim > 0 && (c = getchar()) != EOF && c != '\n') {
s[i++] = c;
}
if (c == '\n') {
s[i ++] = c;
}
s[i] = '\0';
return i;
}
#define MAXLINE 100
main(){
double sum, atof(char []);
char line[MAXLINE];
int getline(char line[], int max);
sum = 0;
while (getline(line, MAXLINE) > 0) {
printf("\t%g\n", sum += atof(line));
}
return 0;
}