整形与字符串互转

前言

C提供了把字符串转化为整形数的函数atoi()和把整形数转化为字符串的函数itoa()

itoa()函数的原型为: char itoa( int value, char string,int radix);

itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转换数字时所用的基数。在例中,转换基数为10。10:十进制……

itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。

是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:

char str[255]; sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。

atoi()函数的原型为:int atoi(const char * string)

atoi()函数有1个参数,就是源字符串,返回值为转化结果

实现自己的itoa()和atoi()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <math.h>
using namespace std;


/**
 * string 转化为 int
 **/
int Atoi(const char* string){
    size_t wei = strlen(string);
    int num = 0;
    for (int i=0; i<wei; i++) {
        num = num*10+(string[i]-'0');
    }
    return num;
}

/**
 * 计算位数
 **/
int wei(int num,int radix){
    int count = 0;
    while (num>0) {
        num = num/radix;
        count++;
    }
    return count;
}


/**
 * int 转化为 string
 * num 待转化的数字
 * str 写入转化结果的目标字符串
 * radix 转换数字时所用的基数(进制)
 **/
void Itoa(int num,char str[],int radix){
    int size = wei(num,radix);
    memset(str, '\0', size);
    int a = pow(radix, size-1);
    int tmp  =num;
    for (int i=0; i<size; i++) {
        str[i] = tmp/a%radix+'0';
        a = a/radix;
    }
}



int main(int argc, const char * argv[]) {

    //cout<<Atoi("1234")<<endl;

    char str[1000];
    Itoa(90, str,10);
    printf("%s\n",str);
    char str2[1000];
    sprintf(str2, "%d",10);
    printf("%s\n",str2);

    return 0;
}

Comments