T0T0T0T0T0T0T0T0T0T 整数编号 C语言 求改错!!!TTTTTTTTTTTT

例如输入:4 3 6 8 2 3 9
输出:
4 4
3 2
6 5
8 6
2 1
3 3
9 7
要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第2个整数为3,第6个整数也为3,则将先输入的整数3的编号在前,后输入的整数3的编号在后。编写函数完成为整数编号。
函数原型:int number( char *str, struct nn a[] );
其中:str:保存以字符串方式接收的键盘输入,
a: 保存整数及编号的结构数组的首地址,
函数返回值:已输入的整数的个数。

#include <stdio.h>
struct nn
{ int no;
int num;
};
typedef struct nn DATA;
int number( char * , DATA []);
int main( )
{
DATA b[100];
char sa[500]; //
int i, n;
gets( sa );
n = number( sa, b );
for ( i=0; i<n; i++ )
printf("%d %d\n", b[i].num, b[i].no );
return 0;
}

//

void bubbleSort(int arr[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(arr[j+1]<arr[j])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}

int number( char * str, DATA b[] )
{
int put[251],anshunxu[251],bianhao[251];
int i,j=0,have;
// 得数的个数
for(i=0;str[i]!='\0';i++)
{
if(str[i]!=' ')
{
put[j]=str[i];
j++;
}
}
put[j]='\0';

have=j;
j=0;
return have;

// 把put复制到anshunxu
for(i=0;i<have;i++)
{
anshunxu[i]=put[i];
}

// 冒泡排序
bubbleSort(anshunxu,have);
// 得到编号的数组
for(i=0;i<have;i++)
{
for(j=0;j<have;j++)
{
if(put[i]==anshunxu[j])
{
bianhao[i]=j+1;
}
}
}
bianhao[i]='\0';

for(i=0;i<have;i++)
{
b[i].num=put[i];
b[i].no=bianhao[i];
}
}

这是你原来的方法,我改了两行,
一个是put[j]=str[i],这一行要改成put[j]=str[i]-'0',这是从char 到 int的转换,如果不变就成了把put[j]赋值成字符型str[i]的值了,
另一个在后面那个函数,return have使用之后,后面的代码就不执行了,就好象短路一样,
要放在后面,或是有条件的返回
可是改了这两处之后还是不对,排出来结果差的太多,好象是你的冒泡内部的问题,要重新换种方法试试..我对排序很外行,查不出来根本所在
#include <stdio.h>
struct nn
{ int no;
int num;
};
typedef struct nn DATA;
int number( char * , DATA []);
int main( )
{
DATA b[100];
char sa[500]; //
int i, n;
gets( sa );
n = number( sa, b );
for ( i=0; i<n; i++ )
printf("%d %d\n", b[i].num, b[i].no );
return 0;
}

//

void bubbleSort(int arr[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(arr[j+1]<arr[j])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}

int number( char * str, DATA b[] )
{
int put[251],anshunxu[251],bianhao[251];
int i,j=0,have;
// 得数的个数
for(i=0;str[i]!='\0';i++)
{
if(str[i]!=' ')
{
put[j]=str[i]-'0';
j++;
}
}
put[j]='\0';

have=j;
j=0;
//return have;

// 把put复制到anshunxu
for(i=0;i<have;i++)
{
anshunxu[i]=put[i];
}

// 冒泡排序
bubbleSort(anshunxu,have);
// 得到编号的数组
for(i=0;i<have;i++)
{
for(j=0;j<have;j++)
{
if(put[i]==anshunxu[j])
{
bianhao[i]=j+1;
}
}
}
bianhao[i]='\0';

for(i=0;i<have;i++)
{
b[i].num=put[i];
b[i].no=bianhao[i];
}
return have;
}
温馨提示:答案为网友推荐,仅供参考