注册 登录
编程论坛 C++教室

求助:将整数转化成字符串。

treever 发布于 2005-10-23 21:05, 4496 次点击
编一个函数,将一个不大于9999的整数转换成字符串??我想了很久不知道怎么做。请高手帮忙啊。用C++编
16 回复
#2
凌云2005-10-24 09:39

#include<iostream.h>

void main() { char a[5]; cin>>a; cout<<a<<endl; } 不大于9999 5就够了

#3
treever2005-10-24 13:21
要用函数来编啊,谁会啊。是不是要用到递归函数啊。
#4
wwuuwu2005-11-19 23:15

我写了一个复杂度为O(n*n*n*n)的算法,看了可别骂我,我也是没办法!

#include "stdafx.h"
#include<iostream>
#include "string"

using namespace std;

string Convert(int a)
{
string res;
if(a>=0&&a<=9)
{
switch(a)
{
case 0:
res="0";
break;
case 1:
res="1";
break;
case 2:
res="2";
break;
case 3:
res="3";
break;
case 4:
res="4";
break;
case 5:
res="5";
break;
case 6:
res="6";
break;
case 7:
res="7";
break;
case 8:
res="8";
break;
case 9:
res="9";
break;
}
}
return res;
}


void main()
{
int a=1500;
string s1;
string s2;
string s3;
string s4;
string s;
for(int i=1;i<=9;i++)
for(int j=0;j<=9;j++)
for(int n=0;n<=9;n++)
for(int m=0;m<=9;m++)
if((i*1000+j*100+n*10+m)==a)
{
s1=Convert(i);
s2=Convert(j);
s3=Convert(n);
s4=Convert(m);
s=s1+s2+s3+s4;
break;
}
cout<<s<<endl;
}



为了降低复杂度,其实我吧四个for循环改成如下,但又出错,如果那位高手查出了问题请邮件联系我(wuwwuu@hotmail.com):
//int i,j,n,m;
//for(i=1;i<=9;i++)
//{
// if(i==a%1000)
// break;
//}
//for(j=0;j<=9;j++)
//{
// if((i*10+j)==a%100)
// break;
//}
// for(n=0;n<=9;n++)
// {
// if((i*100+j*10+n)==a%10)
// break;
// }
// for(m=0;m<=9;m++)
// {
// if((i*1000+j*100+n*10+m)==a)
// break;
// }

#5
nFox2005-11-20 00:08
这样应该可以....

#include<iostream>
using namespace std;
char* convert(int value)
{
char* string=new char[5];
string[4]='\0';
for(int i=3;i>=0;--i)
{
if(value==0)
{
string[i]=0x20;
}
else
{
string[i]=value%10+0x30;
value/=10;
}
}
return string;
}
int main()
{
int value;
cin>>value;
cout<<convert(value)<<endl;
return 0;
}
#6
nFox2005-11-20 00:16

有一点错误

主函数改为

int main()

{

int value;

cin>>value;

char* string=convert(value);

cout<<string<<endl;

delete string;

return 0;

}

#7
wwuuwu2005-11-20 11:04

五楼的朋友解释一下吧,看了以后我可是一团雾水.
if(value==0)
{
string[i]=0x20;
}
else
{
string[i]=value%10+0x30;
value/=10;
}

#8
nFox2005-11-20 12:46
对于一个数字n,它的ASCII码是 n+0x30.空格的ASCII码为 0x20
string[i]=value%10+0x30;//数字对10求模,得到最后一位,再求得其ASCII码存放在字符串相应位置
value/=10; //数字除10,为后一步求前一位的ASCII码准备...如此循环

if(value==0) //若数字小于4位,循环到后来时变为0,则将空格存放在字符串相应位置
{
string[i]=0x20;
}


.......不知有没说清楚...



#9
ElfDN2005-11-20 21:27
用itos,帮助里有说怎么用,比较繁但用起来还是比较方便的,BCB可以用,在G++上不行
上面的方法好象都挺烦琐的,我想想,想到好的发出来
#10
ElfDN2005-11-20 21:41
#include<iostream>
using namespace std;
int main(){
//假设N是计算所得
int a,b,n,temp,len;
cin>>a>>b;
n=a+b;
cout<<n<<endl;
//转换成倒的
string s1,s2;
while(n){
temp=n%10;
s1+= '0'+temp;
n/=10;
}
//再倒一次
len=s1.length();
for(int i=0; i<len; i++)
s2+=s1[len-i-1];
cout<<s2<<endl;
}
行了,应该不算太烦吧
#11
lwei2005-11-20 21:46
天, 写的好复杂啊, 用sprintf或则直接进行类型转换就可以了(按位)

s[0]=i/1000+'0';;
j=i-(i/1000)*1000;
i=j;
s[1]=i/100+'0';;
j=i-(i/100)*100;
i=j;
s[2]=i/10+'0';
s[3]='\0';


cout << s << endl;
#12
ElfDN2005-11-20 21:49

晕死,不确定是4个的呀,

#13
lwei2005-11-20 21:52
以下是引用ElfDN在2005-11-20 21:49:00的发言:

晕死,不确定是4个的呀,

这些还要别人教?

#14
ElfDN2005-11-20 22:14
那像你这样乱申请就不行了
#15
nFox2005-11-21 12:13
晕~~~~~偶那个不就行了..复杂度O(n)....
搞那么麻烦干嘛~~
#16
chenpengyu2005-11-22 18:09

#include"iostream"
#include"string"
using namespace std;
int main()
{
int i;
cout<<"ÇëÊäÈëÒ»¸ö²»´óÓÚ9999µÄÕûÊý£º"<<endl;
cin>>i;
char str[5];
for(int j=0;j<5;j++)
{
if(i==0)
break;
else
{str[j]=i%10+'0';
i=i/10;
}
}
int m=strlen(str);
char *st=new char[m];
for(int k=0;k<m;k++)
st[k]=str[m-k-1];
cout<<st;
return 0;
}

#17
沉慕2012-12-24 21:58
bei
1