圣保罗飞里约热内卢:c++数字安字符串方法排序的方法问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 16:11:06
思路是这样的 随机输入n个数 比如2、47、18、3
输出的顺序是18、2、3、47(安字符串从小到大输出)
18比2小,因为1小于2,,,,,,,,,,,,,
能给我思路与方法吗
如果能帮我找到原代码 加50分加50分

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int iArraySize,i,j,temp;
int * a;
char buf1[10],buf2[10];
cout<<"Input array size"<<endl;//输入数组的大小
cin>>iArraySize;

if((a=new int[iArraySize])==NULL)
{
cout<<"Can't allocate memory!"<<endl;
return;
}
cout<<"Input "<<iArraySize<<"array numbers"<<endl;
for(i=0;i<iArraySize;i++)//输入数组
{
cin>>*(a+i);
}
for(i=0;i<iArraySize;i++)//将数组按字符顺序排序
{
for(j=0;j<iArraySize-i-1;j++)
{
itoa(*(a+j),buf1,10);
itoa(*(a+j+1),buf2,10);
if(strcmp(buf1,buf2)>0)
{
temp=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=temp;
}
}
}

for( j=0;j<iArraySize;j++)//输出数组
{
cout<<*(a+j)<<endl;
}

}

我写了个C语言的,你试着改成C++。

#define N 10
fun(int p,int num)
{
int temp[N];
int i,j;
do
{
for(j=0;j<p-1;j++)
temp[j]=temp[j+1];
temp[p-1]=num%10;
num=num/10;
}
while(num!=0);
return (temp[0]);
}

main()
{
int i,j,bit;
int temp;
int a[N];
printf("please input %d Number:\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++)

for(j=0;j<N-i-1;j++)
{
bit=0;
do
{
bit=bit+1;
if( fun(bit,a[j]) > fun(bit,a[j+1]) )
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
break;
}

}
while(fun(bit,a[j]) == fun(bit,a[j+1])&&fun(bit,a[j])&&fun(bit,a[j+1]));

}
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
}

先读取n个整数,然后用itoa()函数依次将它们转成字符串。
(itoa函数的用法是:假设数存放在a变量,要将结果字符串存放在buf数组,则用itoa(a,buf,10),此处10表示用10进制表示a)
用strcmp(char *a,char *b)来比较字符串a和b的大小。如果a比b小,函数返回-1,如果相同,返回0,如果a比b大,返回1。
接下来就可以按比较整数数组排序来做了,冒泡排序就行了。而且在排序过程中,交换操作可以直接交换两个字符串的指针,不要交换两个字符串的内容。