tag 标签: 字符转换

相关博文
  • 热度 6
    2013-4-14 10:48
    2481 次阅读|
    0 个评论
      数字转化为字符串 面试例题1:使用库函数将数字转换为字符串。 考点:C库函数中数字转换为字符串的使用。 出现频率:★★★ 解析 C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 itoa():将整型值转换为字符串。 ltoa():将长整型值转换为字符串。 ultoa():将无符号长整型值转换为字符串。 gcvt():将浮点型数转换为字符串,取四舍五入。 ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 fcvt():指定位数为转换精度,其余同ecvt()。 还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢。下列程序演示了如何使用itoa()函数和gcvt()函数:   1    # include stdio.h 2    # include stdlib.h 3    4    int main () 5    { 6        int num_int = 435; 7        double num_double = 435.10f; 8        char str_int ; 9        char str_double ; 10   11       itoa(num_int, str_int, 10);  //把整数num_int转成字符串str_int 12       gcvt(num_double, 8, str_double);  //把浮 点数num_double转成字符串str_double 13   14       printf("str_int: %s/n", str_int); 15       printf("str_double: %s/n", str_double); 16   17       return 0; 18   } 程序输出结果: 1    str_int: 435 2    str_double: 435.10001 代码第11行中的参数10表示按十进制类型进行转换,转换后的结果是"435",如果按二进制类型进行转换,则结果为"1101110011"。 代码第12行中的参数8表示精确位数,这里得到的结果是"435.10001"。 答案 可以使用atoi系列函数把数字转换成字符串。 面试例题2:不使用库函数将整数转换为字符串。 考点:数字转换为字符串,理解相关ASCII码。 出现频率:★★★★ 解析 如果不使用atoi或sprintf等库函数,可以通过把整数的各位上的数字加"0"转换成char类型并存到字符数组中。但是要注意,需要采用字符串逆序的方法。如以下程序所示:   1    #include iostream 2    using namespace std; 3    4    void int2str(int n, char *str) 5    { 6        char buf = ""; 7        int i = 0; 8        int len = 0; 9        int temp = n 0 ? -n: n;  // temp为n的绝对值 10   11       if (str == NULL) 12       { 13           return; 14       } 15       while(temp) 16       { 17           buf = (temp % 10) + '0';  //把temp的每一位上的数存入buf 18           temp = temp / 10; 19       } 20   21       len = n 0 ? ++i: i;  //如果n是负数,则多需要一位来存储负号 22       str = 0;            //末尾是结束符0 23       while(1) 24       { 25           i--; 26           if (buf ==0) 27           { 28               break; 29           } 30           str = buf ;  //把buf数组里的字符拷到字符串 31       } 32       if (i == 0 ) 33       { 34           str = '-';          //如果是负数,添加一个负号 35       } 36   } 37   38   int main() 39   { 40       int nNum; 41       char p ; 42   43       cout "Please input an integer:"; 44       cin nNum; 45       cout "output: " ; 46       int2str(nNum, p);        //整型转换成字符串 47       cout p endl; 48   49       return 0; 50   } 程序中的int2str函数完成了int类型到字符串类型的转换。在代码第46行对int2str函数做了测试。程序的执行结果如下所示: Please input an integer: 1234 Output: 1234 如果输入的是个负数,程序执行结果如下所示: Please input an integer: -1234 Output: -1234 接下来对int2str函数的实现进行分析。 代码第9行,把参数n的绝对值赋给temp,以后在计算各个位的整数时用temp,这样保证在负数情况下取余不会出现问题。 代码第11~第14行判断str的有效性,str不为NULL。 代码第15~第19行的while循环中,将n的各个位存放到局部数组buf中,存放的顺序与整数顺序相反。例如n为整数123 456,while循环结束后buf应为"654 321"。 代码第21行计算转换后字符串的长度len,如果是负数,长度应该再加1。 代码第22~第31行把数组buf中的非0元素逆向复制到参数str指向的内存中,如果n是负数,则str指向的第一个内存存放负号。