// 整数转字符串
char *itoa(int num, char *str, int radix)
{
char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //索引表
unsigned unum;
int i = 0;
// 获取要转换的整数的绝对值
if (radix == 10 && num < 0) {
unum = (unsigned)-num;
str[i++] = '-';
} else {
unum = (unsigned)num;
}
// 转换部分,注意转换后是逆序的
do {
str[i++] = index[unum % radix]; //取unum的最后一位,并设置为str对应位,指示索引加1
unum /= radix; //unum去掉最后一位
} while (unum)
str[i] = '\0'; //在字符串最后添加'\0'字符,c语言字符串以'\0'结束
int k; // k用来指示调整顺序的开始位置;
int j; // j用来指示调整顺序时的交换;
//将顺序调整过来
if (str[0] == '-') { //如果是负数,符号不用调整,从符号后面开始调整
k = 1;
} else { //不是负数,全部都要调整
k = 0;
}
char temp; //临时变量,交换两个值时用到
for (j = k; j <= (i - 1) / 2; j++) { //头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1
temp = str[j]; //头部赋值给临时变量
str[j] = str[i - 1 + k - j]; //尾部赋值给头部
str[i - 1 + k - j] = temp;
}
return str;
}
// 字符串转整数
long atol(const char *nptr)
{
int c; /* 当前要转换的字符(一个一个字符转换成数字) */
long total; /* 当前转换结果 */
int sign; /* 标志转换结果是否带负号*/
/*跳过空格,空格不进行转换*/
while (isspace(int)(unsigned char)*nptr) { // C 库函数 int isspace(int c) 检查所传的字符是否是空白字符
++nptr;
}
int c = (int)(unsigned char)*nptr++; //获取一个字符准备转换
sign = c;
if (c == '-' || c == '+') {
c = (int)(unsigned char)*nptr++;
}
total = 0; //设置转换结果为0
while (isdigit(c)) { // C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。十进制数字是:0 1 2 3 4 5 6 7 8 9
total = 10 * total + (c - '0'); /* 根据ASCII码将字符转换为对应的数字,并且乘10累积到结果 */
c = (int)(unsigned char)*nptr++; /* 取下一个字符 */
}
// 根据符号指示返回是否带负号的结果
if (sign == '-') {
return -total;
} else {
return total;
}
}
yo peace!
网友评论