一.将字符串转化为对应的数值
/*=============================================================================
#
# FileName: stringToNo.c
# Algorithm: 将字符串转化为对应的整型数值
# Author: Knife
# Created: 2014-06-22 20:37:36
#
=============================================================================*/
#include<stdio.h>
#include<string.h>
int atoi(char* s){
int i, n;
n = ;
for(i = ; s[i] >= '' && s[i] <=''; ++i){
n = * n + (s[i] - '');
}
return n;
} void main(){
char charArr[] = "";
int number = atoi(charArr);
printf("%d\n",number);
}
二.将数值转化成字符串
/*=============================================================================
#
# FileName: noToString.c
# Algorithm: 将整型数值转化成字符串
# Author: Knife
# Created: 2014-06-22 20:37:36
#
=============================================================================*/
#include<stdio.h>
#include<string.h>
#define MAX 100 //字符串逆转
void reverse(char* charArr){
int j, k, tmp;
j = ;
k = strlen(charArr)-;
for(; j < k; j++, k--){
tmp = charArr[j];
charArr[j] = charArr[k];
charArr[k] = tmp;
}
} void itoa(int n, char* charArr){
int tmpN, i, sign;
i = ;
//判断是否为负数
if((sign = n) < ){
n = - n;
}
//循环
while(n > ){
tmpN = n % ;
n = n / ;
charArr[i++] = tmpN + '';
}
if(sign < ){
charArr[i++] = '-';
}
charArr[i] = '\0';
reverse(charArr);
} void main(){
int n = -;
char charArr[MAX];
itoa(n, charArr);
printf("%s\n", charArr);
}
三.问题扩展
在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2^(字长-1)的情况,因为我们在(二)中的代码中判断如果n为负数,令n=-n,所以导致了溢出。修改该函数,使它在任何机器上运行时都能打印出正确的值。修改后的代码如下:
/*=============================================================================
#
# FileName: noToString2.c
# Algorithm: 将整型数值转化成字符串(扩展版)
# Author: Knife
# Created: 2014-06-22 20:48:36
#
=============================================================================*/
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define MAX 100 //字符串逆转
void reverse(char* charArr){
int j,k,tmp; j = ;
k = strlen(charArr)-;
for(; j < k; j++, k--){
tmp = charArr[j];
charArr[j] = charArr[k];
charArr[k] = tmp;
}
} void itoa(int n, char* charArr){
int tmpN, i, sign;
i = ;
sign = n;
//循环
do{
charArr[i++] = abs(n % ) + '';
}while (n /= );
if(sign < ){
charArr[i++] = '-';
}
charArr[i] = '\0';
//字符串逆转
reverse(charArr);
} void main(){
int n = INT_MIN;
char charArr[MAX];
itoa(n, charArr);
printf("%s\n", charArr);
}