C ++程序中的排序问题 [英] sorting problem in C++ program

查看:80
本文介绍了C ++程序中的排序问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此处此程序是由c ++类概念制作的,但如果条件不满足,则此sortbyname,sortbymass和sortbydistance不起作用

here this program made by c++ class concept but in this sortbyname,sortbymass, and sortbydistance not work if conditoned not satiesfied

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <process.h>


FILE *input,*output;




class planet
{

   char name[20];
   double Relativemass;
   double distance;

public:
	
	planet()
	{

		Relativemass=0.0;
		distance=0.0;
	}

    void setplanetdata();

    void sortbyname();  
	void sortbyrelativemass();
	void sortbydistance();

	void display()
	{
		cout<<"\nName of Planet:"<<name<<"\t";
		cout<<"\nRelative Mass Of Plane:"<<Relativemass<<"\t";
		cout<<"\nDistance from Sun:"<<distance<<endl;
	}  
    
};

void planet::setplanetdata()
{

	fscanf(input,"\n\t%s \t\t%lf \t\t%lf",name,&Relativemass,&distance);
       cout<<name<<" "<<Relativemass<<" "<<distance<<endl;
}


void planet::sortbyname()
{
	
	  int i=0,j=0;
	  double	temp,temp1;  
	  char temp3[10];
	  planet planetdata[9];
  
    fscanf(input,"\n\t%s \t\t%lf \t\t%lf",name,&Relativemass,&distance);
	  for (i=0;i<8;i++)
	  {
		  for (j=i+1;j<9;j++)
		  {
			  if ( planetdata[i].name > planetdata[j].name )
			  {

	            
	            strcpy(temp3,planetdata[i].name);
				strcpy(planetdata[i].name,planetdata[j].name);
				strcpy(planetdata[j].name,temp3);
				
				temp= planetdata[i].Relativemass ;
				planetdata[i].Relativemass =planetdata[j].Relativemass;
				planetdata[j].Relativemass=temp;
				
				temp1= planetdata[i].distance;
				planetdata[i].distance=planetdata[j].distance;
				planetdata[j].distance=temp1;

			  }
		  }

	  }

    cout<<"name :"<<name<<"\t\tRelativemass :"<<Relativemass<<"\t\tdistance :"<<distance<<endl;
}

void planet::sortbyrelativemass()
{
	int i=0,j=0;
	double	temp,temp1;  
	char temp3[10];
	planet planetdata[9];
	
	
	for (i=0;i<8;i++)
	{
		for (j=i+1;j<9;j++)
		{
			if ( planetdata[i].Relativemass > planetdata[j].Relativemass)
			{
				
				
				strcpy(temp3,planetdata[i].name);
				strcpy(planetdata[i].name,planetdata[j].name);
				strcpy(planetdata[j].name,temp3);
				
				temp= planetdata[i].Relativemass ;
				planetdata[i].Relativemass =planetdata[j].Relativemass;
				planetdata[j].Relativemass=temp;
				
				temp1= planetdata[i].distance;
				planetdata[i].distance=planetdata[j].distance;
				planetdata[j].distance=temp1;
				
			}
			else
			{
				int abs;

			}
		}
		
	}
	
    cout<<"name :"<<name<<"\t\tRelativemass :"<<Relativemass<<"\t\tdistance :"<<distance<<endl;

}


void planet::sortbydistance()
{
	int i=0,j=0;
	double	temp,temp1;  
	char temp3[10];
	planet planetdata[9];
	
	
	for (i=0;i<8;i++)
	{
		for (j=i+1;j<9;j++)
		{
			if ( planetdata[i].name > planetdata[j].name )
			{
				
				
				strcpy(temp3,planetdata[i].name);
				strcpy(planetdata[i].name,planetdata[j].name);
				strcpy(planetdata[j].name,temp3);
				
				temp= planetdata[i].Relativemass ;
				planetdata[i].Relativemass =planetdata[j].Relativemass;
				planetdata[j].Relativemass=temp;
				
				temp1= planetdata[i].distance;
				planetdata[i].distance=planetdata[j].distance;
				planetdata[j].distance=temp1;
				
			}
		}
		
	}
	
    cout<<"name :"<<name<<"\t\tRelativemass :"<<Relativemass<<"\t\tdistance :"<<distance<<endl;
	
}

int main()
{

      planet planets[9];
	  planet planetdata;


	 
	input=fopen("PlanetData.dat","r");
	if (input == NULL)
	{
		printf("error :input \n");
		exit(-1);
	}

	cout<<"\n\nRead planet data from solarSystem.dat file"<<endl;
    
	for (int i=0;i<9;i++)
	{
		planets[i].setplanetdata();
	}

    cout<<"\n\ndisplay planet data:"<<endl;
    for (i=0;i<9;i++)
	{
	  planets[i].display();   
	}
    
	cout<<"\n Display Planet data in sorting order by name"<<endl;
    for (i=0;i<9;i++)
    {
		planets[i].sortbyname();
    }

    cout<<"\n Display Planet data in sorting order by RelativeMass"<<endl;
    for (i=0;i<9;i++)
    {
		planets[i].sortbyrelativemass();
    }	

	cout<<"\n Display Planet data in sorting order by distance"<<endl;
    for (i=0;i<9;i++)
    {
		planets[i].sortbydistance();
    }
   

	fclose(input);

	return 0;
}

推荐答案

您正在尝试对类方法中的本地数组进行排序,而不是对main()程序中的数据进行排序.使用某些会大大简化事情的std库函数(例如std::vector)会更好.
You are trying to sort local arrays in your class methods, rather than the data in your main() program. You would be better off using some of the std library functions (std::vector for example) that would simplify things considerably.


因为在所有这三个函数中您都做相同的事情:
Since in all three functions you do the same thing:
planet planetdata[9];
for (i=0;i<8;i++)
{
    for (j=i+1;j<9;j++)
    {
        if ( planetdata[i].name > planetdata[j].name )


我并不惊讶他们没有工作.您分配一个数组来保存数据-然后实际上不将任何数据放入其中进行检查或排序...


I am not surprised they do not work. You assign an array to hold your data - and then don''t actually put any data in it to check or sort...


这篇关于C ++程序中的排序问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆