百度
360搜索
搜狗搜索

itoa函数实现,c++itoa函数要怎么用,举个例子?详细介绍

本文目录一览: C语言 编写函数itoa(int n,char p)

char * itoa(int n, char * p){ i = 0;//初始化下标为0 itostr(n, p); return 0; //加这句才能编译通过}
// 调用这个函数有一个假设,给定的参数p指向一个足够的保存结束数字的控件
// 根据整数的最大范围进行估算后加上符号位、结束字符(null)
//
// 如果调用时给出的参数p是0,则返回转换后的字符总数。
// 参数:
// int n 要转化的数字
// char *p 保存转换后数字的指针
// 返回:
// 字符串的长度(不包括结束字符)
//
int itoa(int n,char* p)
{
char* tmp;
int count;
int r;
char m;
char rp[32];//临时变量,保存转化后的数字字符串
int minus=0;
count=0;
rp[31]=0;//最后一个是null
tmp=rp+30;//指向倒数第一个数字
if(n<0)
{
minus=1;
n=-n;
}
r=n%10;//余数
n=n/10;//商
*tmp=nchars[r];
tmp--;
count++;
while(n!=0)
{
r=n%10;
n=n/10;
*tmp=(char)(r+0x30);
tmp--;
count++;
}
// 处理符号
if(minus!=0)
{
*tmp='-';
count++;
} else
tmp++;//指向第一个数字
if(p!=NULL)
{
// 如果给定了有效的参数 p,则复制结果
for(n=0;n<=count;n++)
{
p[n]=tmp[n];
}
}
// 返回转换后的字符总数,不包括结束字符(null)
return count;
}
有2种方式实现,其中两种是使用系统函数,另一种是直接自己编写。
下面的代码就是2种方式的实现,包括任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
1. 利用系统函数。sprintf(str,"%d",value);str是转化存储的位置,%d表示十进制格式,value是要转化的数字。所以代码可以为:
char * itoa(int n, char * p){ sprintf(p, "%d", n); return (p);}2. 自己编写。由于计算方法是每次都除以10和对10取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:
static int i = 0;char * itostr(int n, char * p)//递归函数{ if (n < 10) //递归结束条件 { p[i] = n + '0'; //当前数转换成字符放入字符串 } else { itostr(n / 10, p);//递归调用 i++; //字符串索引+1 n %= 10; //计算当前值 p[i] = n + '0'; //当前数转换成字符放入字符串 } p[i+1] = '\0'; //字符串结束标志 return (p);}char * itoa(int n, char * p){ i = 0;//初始化下标为0 itostr(n, p);}最后测试代码如下(以自己编为例,其余只要替换intoa函数中的代码内容即可):
#include

static int i;char * itostr(int n, char * p)//递归函数{ if (n < 10) //递归结束条件 { p[i] = n + '0'; //当前数转换成字符放入字符串 } else { itostr(n / 10, p);//递归调用 i++; //字符串索引+1 n %= 10; //计算当前值 p[i] = n + '0'; //当前数转换成字符放入字符串 } p[i+1] = '\0'; //字符串结束标志 return (p);}char * itoa(int n, char * p){ i = 0;//初始化下标为0 itostr(n, p);}int main (){ int num; char str[33]; printf ("Enter a number: "); scanf ("%d",&num); itoa (num, str); printf ("The number: %s\n", str); return 0;}

c语言中,函数itoa有什么功能,怎么用

itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使
用。但是,大多数的编译器(如Windows上的)通常在头文件中包含这个函数。在中与之有相反功能的函数是atoi。功能:把一整数转换为字符串。
用法
  char
*itoa(int
value,
char
*string,
int
radix);
头文件:
程序例:
  #include
  #include
  int
main()
  {
  int
number
=
123456;
  char
string[25];
  itoa(number,
string,
10);
  printf("integer
=
%d
string
=
%s\n",
number,
string);
  return
0;
  }
  /*
实现itoa函数的源代码
*/
  char
*myitoa(int
num,char
*str,int
radix)
{
/*
索引表
*/
  char
index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  unsigned
unum;
/*
中间变量
*
  int
i=0,j,k;
  /*
确定unum的值
*/
  if(radix==10&&num<0)
/*
十进制负数
*/
  {
  unum=(unsigned)-num;
  str[i++]='-';
  }
  else
unum=(unsigned)num;
/*
其他情况
*/
  /*
逆序
*/
  do
{
  str[i++]=index[unum%(unsigned)radix];
  unum/=radix;
  }while(unum);
  str[i]='\0';
  /*
转换
*/
  if(str[0]=='-')
k=1;
/*
十进制负数
*/
  else
k=0;
  /*
将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果
*/
  for(j=k;j<=(i-1)/2.0+k;j++)
  {
  num=str[j];
  str[j]=str[i-j-1+k];
  str[i-j-1+k]=num;
  }
  return
str;
  }
  itoa的第三个参数用于将数字转换成不同的进制。举个例子:
  #include
  #include
  int
main(void)
  {
  int
number
=
12345;
  char
string[25];
  itoa(number,
string,
10);
//按十进制转换
  printf("integer
=
%d
string
=
%s\n",
number,
string);
  itoa(number,
string,
16);
//按16进制转换
  printf("integer
=
%d
string
=
%s\n",
number,
string);
  return
0;
  }
  输出结果:
  integer
=
12345
string
=
12345
--说明12345的十进制表示就是12345
  integer
=
12345
string
=
3039
——说明12345的十六进制表示是0x3039
  但是要注意,itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
  用几进制表示吧:)
  MSDN的例子
  Example
  /*
ITOA.C:
This
program
converts
integers
of
various
  *
sizes
to
strings
in
various
radixes.
  */
  #include
  #include
  void
main(
void
)
  {
  char
buffer[20];
  int
i
=
3445;
  long
l
=
-344115L;
  unsigned
long
ul
=
1234567890UL;
  _itoa(
i,
buffer,
10
);
  printf(
"String
of
integer
%d
(radix
10):
%s\n",
i,
buffer
);
  _itoa(
i,
buffer,
16
);
  printf(
"String
of
integer
%d
(radix
16):
0x%s\n",
i,
buffer
);
  _itoa(
i,
buffer,
2
);
  printf(
"String
of
integer
%d
(radix
2):
%s\n",
i,
buffer
);
  _ltoa(
l,
buffer,
16
);
  printf(
"String
of
long
int
%ld
(radix
16):
0x%s\n",
l,
buffer
);
  _ultoa(
ul,
buffer,
16
);
  printf(
"String
of
unsigned
long
%lu
(radix
16):
0x%s\n",
ul,
buffer
);
  }
  Output
  String
of
integer
3445
(radix
10):
3445
  String
of
integer
3445
(radix
16):
0xd75
  String
of
integer
3445
(radix
2):
110101110101
  String
of
long
int
-344115
(radix
16):
0xfffabfcd
  String
of
unsigned
long
1234567890
(radix
16):
0x499602d2
  指定要转换的进制的基数,其值好象在1--36之间都可以
  这个不是C标准库中的函数,而是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
  char
str[255];
  sprintf(str,
"%x",
100);
//将100转为16进制表示的字符串。
itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使 用。但是,大多数的编译器(如Windows上的)通常在头文件中包含这个函数。在中与之有相反功能的函数是atoi。功能:把一整数转换为字符串。
用法
  char *itoa(int value, char *string, int radix);
头文件:
程序例:
  #include
  #include
  int main()
  {
  int number = 123456;
  char string[25];
  itoa(number, string, 10);
  printf("integer = %d string = %s\n", number, string);
  return 0;
  }
  /* 实现itoa函数的源代码 */
  char *myitoa(int num,char *str,int radix)
{
/* 索引表 */
  char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  unsigned unum; /* 中间变量 *
  int i=0,j,k;
  /* 确定unum的值 */
  if(radix==10&&num<0) /* 十进制负数 */
  {
  unum=(unsigned)-num;
  str[i++]='-';
  }
  else unum=(unsigned)num; /* 其他情况 */
  /* 逆序 */
  do {
  str[i++]=index[unum%(unsigned)radix];
  unum/=radix;
  }while(unum);
  str[i]='\0';
  /* 转换 */
  if(str[0]=='-') k=1; /* 十进制负数 */
  else k=0;
  /* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */
  for(j=k;j<=(i-1)/2.0+k;j++)
  {
  num=str[j];
  str[j]=str[i-j-1+k];
  str[i-j-1+k]=num;
  }
  return str;
  }
  itoa的第三个参数用于将数字转换成不同的进制。举个例子:
  #include
  #include
  int main(void)
  {
  int number = 12345;
  char string[25];
  itoa(number, string, 10); //按十进制转换
  printf("integer = %d string = %s\n", number, string);
  itoa(number, string, 16); //按16进制转换
  printf("integer = %d string = %s\n", number, string);
  return 0;
  }
  输出结果:
  integer = 12345 string = 12345 --说明12345的十进制表示就是12345
  integer = 12345 string = 3039 ——说明12345的十六进制表示是0x3039
  但是要注意,itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
  用几进制表示吧:)
  MSDN的例子
  Example
  /* ITOA.C: This program converts integers of various
  * sizes to strings in various radixes.
  */
  #include
  #include
  void main( void )
  {
  char buffer[20];
  int i = 3445;
  long l = -344115L;
  unsigned long ul = 1234567890UL;
  _itoa( i, buffer, 10 );
  printf( "String of integer %d (radix 10): %s\n", i, buffer );
  _itoa( i, buffer, 16 );
  printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
  _itoa( i, buffer, 2 );
  printf( "String of integer %d (radix 2): %s\n", i, buffer );
  _ltoa( l, buffer, 16 );
  printf( "String of long int %ld (radix 16): 0x%s\n", l, buffer );
  _ultoa( ul, buffer, 16 );
  printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul, buffer );
  }
  Output
  String of integer 3445 (radix 10): 3445
  String of integer 3445 (radix 16): 0xd75
  String of integer 3445 (radix 2): 110101110101
  String of long int -344115 (radix 16): 0xfffabfcd
  String of unsigned long 1234567890 (radix 16): 0x499602d2
  指定要转换的进制的基数,其值好象在1--36之间都可以
  这个不是C标准库中的函数,而是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
  char str[255];
  sprintf(str, "%x", 100); //将100转为16进制表示的字符串。

阅读更多 >>>  c语言数组代码,c语言数组代码例子

C++问题:如何实现itoa()函数?求源代码~~~

可以用sprintf间接实现。
char num[20];
int n = 365;
sprintf (num, "%d", n);
到这里num就是"365"的字符串了。
如果是用c++的话可以用sstream头文件里的stringstream实现同样的功能
stringstream num;
int n = 365;
num<
<n;
这里可以用num.str()和num.c_str(),前者是c++的string类型,后者是c的char *类型。
</n;

C++ itoa函数

itoa
为c语言的一个函数。itoa
函数是一个广泛应用的,从非标准扩展到标准的C语言。它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通过header
,因为它是一个从逻辑对应到标准库的函数。itoa
取整数输入值,并将其转换为相应进制数字的字符串。
  用法:
  itoa(i
,num
,10
);
  i
----
需要转换成字符串的数字
  num
----
转换后保存字符串的变量
  10
----
转换数字的基数(即进制)。10就是说按10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
  返回值:指向num这个字符串的指针
  函数原型:
  char
*itoa(
int
value,
char
*string,int
radix);[1]
  原型说明:
  value:欲转换的数据。
  string:目标字符串的地址。
  radix:转换后的进制数,可以是10进制、16进制等。
  程序示例:
  #include
  #include
  int
main(void)
  {
  int
number
=
12345;
  char
string[32];
  itoa(number,
string,
10);
  printf("integer
=
%d
string
=
%s\n",
number,
string);
  return
0;
  }
  char
*itoa(int
value
,char
*string
,int
radix
)
  将整数value
转换成字符串存入string
指向的内存空间
,
  radix
为转换时所用基数(保存到字符串中的数据的进制基数)

C语言里itoa函数的功能是什么?

C语言里itoa函数的功能是把一个整数转换为字符串。
用法:
itoa(i ,num ,10 );
i ---- 需要转换成字符串的数字
num ---- 转换后保存字符串的变量
10 ---- 转换数字的基数(即进制)。10就是说按10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
返回值:指向num这个字符串的指针
扩展资料使用itoa函数注意事项:
itoa() 函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数(进制)。在上例中,转换基数为10,就意味着以10为转换进制。10:十进制;2:二进制及其他进制。
itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
标准库中有sprintf,功能比这个更强,用法跟printf类似:
char str[255];
sprintf(str, "%x", 100); //将100转为16进制表示的字符串。
参考资料来源:百度百科--itoa

c++itoa函数要怎么用,举个例子?

#include

#include

int main()

{

int num = 10;

char str[100];

itoa(num, str, 2);

printf("%s\n", str);

return 0;

}

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

于是想到了一个十进制转二进制的方法:

#include

#include

int main()

{

int num = 10;

char str[100];

int n = atoi(itoa(num, str, 2));

printf("%d\n",n);

return 0;

}先把num转换为二进制的字符串,再把该字符串转换为整数。

C++ ,数值到字符串 itoa() 函数功能的内部实现

其实我觉得应该没怎么复杂,毕竟很多东西已经是底层封装好的,你重新写一些东西,就没必要从底层写起(当然,你从底层写的话,可能效率会好一点,但是优秀的底层封装,高效的上层调用,应该比那个差不到哪去)。
就比如itoa这个函数,就像楼上给一样,利用已经用的东西,直接写就行了。
这也就是高层语言存在的价值了,要不然大家都用汇编好了~~~
char* itoa(int n)
{
char c[24];
int ntemp1, ntemp2;
int i = 0;
ntemp1 = n;
while ((ntemp2 = ntemp1 / 10 != 0) && (ntemp1 %= 10 != 0))
c[i++] = ntemp2 - '0';//如果此数除以10的商和余数均为0,
//则说明已到最高位
c[i] = 0;
return c;
}

关于函数itoa的问题

1)首先itoa函数的第二个变量是char*,意思是指向字符串的指针,而你定义的char *str是一个指向 字符 的指针,当然只能去第一个字符了,你应该写成char str[4],这才是指向字符串的指针。
char* str="123";
这种写法等价于
const char* str="123";
也就是说str指向一个常量字符串
itoa需要的类型是char*,可以使用两种方法:
方法一:定义数组
char str[]="123";
方法二:动态申请内存:
char *str = new char[4];
strcpy(str,"123");
使用完后:
delete []str;
itoa的第2个参数,是一个输出的缓冲,
你的第一种方式, str指向一个常量字符串, 不能用输出缓冲,所以失败
可以这样试试:str = new char [4]; itoa(a, str, 10);
从你的描述中可以看出,你对itoa函数还没有完全了解,下面先列出itoa函数的说明:
原 型:
char *itoa(int value, char *string, int radix);
功 能:
把一整数转换为字符串
用 法:
itoa(i,num,10);
参数说明:
i 需要转换成字符的数字
num 转换后保存字符的变量
10 转换数字的基数(进制).10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型

阅读更多 >>>  malloc(sizeof)是什么意思,ps=(stu)malloc(sizeof(stu)); 是什麽意思

现在分析你的描述中的程序段的问题:
写法1:
int a=123;
char* str="123"; // str为一指向常量字符串的指针
itoa(a,str,10); // 将str作为第2个参数传入itoa,用于保存转换后的结果字符串

此程序段运行过程中会崩溃,原因是指针str指向的是只读存储区,当对此只读存储区进行写操作时,会崩溃,即出现你说的错误

写法2:
int a=123;
char str[4] = "123"; // 定义了一个大小为4的字符数组str,此处可以不初始化
itoa(a,str,10); // 将str作为第2个参数传入itoa,用于保存转换后的结果字符串

此程序段运行正常,原因是字符数组str正好能保存转换后的结果

注意:
1、对itoa函数第二个参数的初始化基本没有必要,关键是要保证其指向的空间能保存转换结果字符串。
2、你说的那个结束符和能否使用itoa没有关系。

写一个将整数转换成字符串的函数itoa

解析:整数转化成字符串,可以采用加'0',然后再逆序,整数加'0'就会隐形转化为char类型的数
#include

#include

using namespace std;

int main(void)

{

int num = 12345, j=0, i=0;

char temp[7], str[7];

while(num)

{

temp[i] = num%10 + '0';

i++;

num = num/10;

}

temp[i] = 0;

printf("temp = %s\n",temp);

i=i-1;

while(i>=0)

{

str[j] = temp[i];

j++;

i--;

}

str[j]=0;

printf("string = %s\n", str);

return 0;

}

网站数据信息

"itoa函数实现,c++itoa函数要怎么用,举个例子?"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:itoa函数实现,c++itoa函数要怎么用,举个例子?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!