c++实现atoi()和itoa()函数(字符串和整数转化)

 

c++实现atoi()和itoa()函数(字符串和整数转化)

一:起因

(1)字符串类型转化为整数型(Integer),还是字符串类型(String)转化为Double类型,这在java里面有非常好的内部函数,很easy的事情;

(2)但是在c里面没有Integer Double等包装类,由char[]数组转化为整数型就变得不那么简单了,atoi()  itoa()在widows下面有,但是网上说linux 下好像没有 itoa() 函数,用 sprintf() 好了,但是本人测试了一下sprintf()  sscanf()的效率很低。

(3)所以自己手动实现了一下atoi()(字符串转整数)  itoa(整数转字符串)两个函数,有哪里不对的地方,大家指正。

二:实现

(1)atoi()函数原型:int atoi(char *str)  头文件 stdlib.h

函数用途:将字符串转换成一个整数值
输入参数:str 待转换为整型数的字符串
返回值:成功返回转换后的数值,失败则返回0.

(2)代码实现

int my_atoi(char s[])
{
    int i,n,sign;

    for(i=0;isspace(s[i]);i++);   <strong>//跳过空白</strong>,isspace()这个函数在type.h头文件中;也可以s[i]==‘ ‘实现

    sign=(s[i]==‘-‘)?-1:1;
    if(s[i]==‘+‘||s[i]==‘-‘)     <strong>//跳过符号位</strong>
        i++;
    for(n=0;isdigit(s[i]);i++)
        n=10*n+(s[i]-‘0‘);       <strong>//将数字字符转换成整形数字</strong>,<span style="font-size: 13.3333339691162px; font-family: Arial, Helvetica, sans-serif;">isdigit()这个函数在type.h头文件中;也可以s[i]>=‘0‘ && s[i]<=‘9‘‘实现; <span style="font-family: Consolas, ‘Courier New‘, Courier, mono, serif; font-size: 12px; line-height: 18px; background-color: rgb(248, 248, 248);">0x30是 ‘0‘</span></span>
    return sign*n;
}

(3) itoa()函数的原型:char *itoa( int value, char *str,int radix)

函数用途:将整数型值value转换成一个字符串
输入参数:value待转换的整型数 ;str
目标字符串的地址,即返回值;radix:转换后的进制数,可以是10进制、16进制等。

返回值:成功返回一个字符串.

(4)代码实现

/*
Converts an int or long into a character string
将一个整数转化为字符串
*/
char* my_itoa(int n,char str[])
{
    int i,j,len,sign;

    if((sign=n)<0)    //记录符号
        n=-n;         //使n成为正数
    i=0;
    do{
        str[i++]=n%10+‘0‘;    //取下一个数字
    }while((n/=10)>0);      //循环相除

    if(sign<0)
        str[i++]=‘-‘;
    str[i]=‘\0‘;
    len = i;//
    for(j=len-1,i=0;j>i;j--,i++)        //生成的数字是逆序的,所以要交换
    {
        str[j] ^= str[i];
        str[i] ^= str[j];
        str[j] ^= str[i];
    }
    return str;
}

(5) 主函数测试

 1 #include "stdio.h"
 2 #include "ctype.h"
 3 #include "stdlib.h"
 4 int main()
 5 {
 6 &nbsp; &nbsp; int n;
 7 &nbsp; &nbsp; char str[32],*ans;
 8 &nbsp; &nbsp; ans = my_itoa(-123,str);
 9 &nbsp; &nbsp; printf("自编自导的整形转字符串函数my_itoa():%s %s\n",ans,str);
10 &nbsp; &nbsp; printf("系统自带的整形转字符串函数itoa():%s %s\n",itoa(-1,str,16),str);
11 &nbsp; &nbsp; printf("自编自导的字符串转整形函数my_atoi():%d\n",my_atoi(" &nbsp;22qqq"));
12 &nbsp; &nbsp; printf("系统自带的字符串转整形函数atoi():%d\n",atoi(" &nbsp;-2qqq "));
13 &nbsp; &nbsp; system("pause");
14 &nbsp; &nbsp; return 0;
15 }

(6)测试结果:

三:不足之处

(1) itoa()函数的原型:char *itoa( int value, char *str,int radix),自己并未完全实现,只是简单的实现了10进制的

(2)下面会改进的,上面有不足之处,请大神指教

(3) itoa()函数的原型:char *itoa( int value, char *str,int radix),自己简单的实现,默认是实现了10进制的

 1 char __itoa[] = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,
 2                 ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
 3 const unsigned int MY_MAX = 0xFFFFFFFFu;
 4 char* my_itoa2(int n,char str[],int radix=10)
 5 {
 6     int i,j,len,sign;
 7     unsigned int tmp;
 8     i = 0;
 9     if(n<0)    //
10     {
11         tmp = MY_MAX + n + 1;// 这样貌似可以了,按照取反加一的方式进行的
12         do{
13             str[i++]=__itoa[tmp%radix];    //取下一个数字
14         }while((tmp/=radix)>0);//循环相除
15     }
16     else
17     {
18         do{
19             str[i++]=__itoa[n%radix];    //取下一个数字
20         }while((n/=radix)>0);//循环相除
21     }
22
23     str[i]=‘\0‘;
24     len = i;//
25     for(j=len-1,i=0;j>i;j--,i++)        //生成的数字是逆序的,所以要交换
26     {
27         str[j] ^= str[i];
28         str[i] ^= str[j];
29         str[j] ^= str[i];
30     }
31     return str;
32 }
时间: 2024-08-18 19:39:13

c++实现atoi()和itoa()函数(字符串和整数转化)的相关文章

【练习题】atoi和itoa函数的实现

int atoi (const char * str); //Convert string to integer char * itoa ( int value, char * str, int base ); //Convert integer to string (non-standard function) #include <stdio.h> #include <ctype.h> int my_atoi(const char *s) { int i =0; int tota

atoi和itoa函数

#include <stdio.h> #include <stdlib.h> #include <string.h> int Myatoi(const char* str) { if(str==NULL)//判断指针是否为空 { printf("Pointer is NULL\0"); return 0; } while(*str==' ')//忽略前导空字符 str++; int sign=1;//判断符号 if(*str=='-') sign=-

整数转字符串,字符串转整数

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 题目比较简单,但是涉及到许多问题,例如非法输入,有正负号,是否为空字符串,且不是输入大数类型,可以用long long,8字节整型等等.主要:int a=a*10+(str[i]-'0') 也可以直接使用c的库函数,atoi函数,如果不能转换则返回0.使用例子如下 string a="-1232 pighehe"; int num=atoi(a); 1 #inc

编程算法 - 把字符串转换为整数 代码(C)

把字符串转换为整数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数StrToInt, 模拟atoi的功能, 把字符串转换为整数. 须要考虑异常处理, 正负数, 还有Int的最大值(0x7FFFFFFF)和最小值(0x80000000)等情况. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #include <stdio.h> #include &l

C语言itoa()函数和atoi()函数详解(整数转字符C实现)

C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明.● itoa():将整型值转换为字符串.● ltoa():将长整型值转换为字符串.● ultoa():将无符号长整型值转换为字符串.● gcvt():将浮点型数转换为字符串,取四舍五入.● ecvt():将双精度浮点型值转换为字符串

用itoa()函数将整数转换为字符串

在C语言中提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子:atoi     把字符串转换成整型数itoa     把一整数转换为字符串 下面分享一下应用范例,可学习0基础C语言开发教程: #include "stdio.h" #include "ctype.h" #include "stdlib.h" /* Converts a character strin

C语言itoa函数和atoi 函数

C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子:  # include <stdio.h>  # include <stdlib.h>  void main (void)  {  int num = 100;  char str[25];  itoa(num, str, 10);  printf("The number 'num' is %d and the string 's

C语言itoa()函数和atoi()函数详解(整数转字符)

http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整数转换为字符串的一个例子: # include <stdio.h> # include <stdlib.h> void main (void) { int num = 100; char str[25]; itoa(num, str, 10); printf("The num

itoa()函数和atoi()函数详解

C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整数转换为字符串的一个例子:# include <stdio.h># include <stdlib.h>void main (void){int num = 100;char str[25];itoa(num, str, 10);printf("The number 'num' is %d and the string 'str' is %s. \n&qu