帮我做一道编程题!!!高手请进,采纳追加50分!!!

来源:百度知道 编辑:UC知道 时间:2024/06/20 19:09:48
///输入5个国家的名称按字母顺序排列输出

下面是我做的,运行有错,且算法不是很好.我需要一个好的算法!!
我的想法是:先判断5个字符串的第一个字符,若在第一个循环中,能找到最大的那个,那做个标记.余4个进行比较.一直到完成!

但我所写的,还没能测试到我的算法如何,因为在函数传递时用到的指针,我不知道怎么动态分配内存,虽然通过编译,但无法进行计算!

我的算法不是很好,希望你能写一个可行的给我,我会非常感激.还有麻烦你花点时间写一下你的想法,或注释多一点!!!!

#include <iostream.h>
#include <string.h>
class compare;

class compare
{
public:

compare(char *,char *,char *,char *,char *);
int ran();
void print();
private:
char *str[5];
};

compare::compare(char * a,char * b,char * c,char * d,char * e)
{
//str[5]=new char[5];
//str[5]={a,b,c,d,e};
str[0]=a;
str[1]=b;
str[2]=c;
str[3]=d;
str[4]=e;
}
int compare::ran()
{
int tr[5]={0};
int s=strlen(str[0]);
for(int k=1;k<5;k++) //求5个字符串中最长一个
if(strlen(str[k])>s) s=strlen(str[k]);
// s=strlen(str[k])>s ? strlen(str[k

#include <iostream.h>
#include <string.h>
class compare
{
public:

compare(char * a,char * b,char * c,char * d,char * e);
~compare() {for (int i=0;i<5;i++) delete str[i];}
int ran();
void print();
private:
char *str[5];
};

compare::compare(char * a,char * b,char * c,char * d,char * e)
{
str[0]=new char [strlen(a)+1]; strcpy(str[0],a);
str[1]=new char [strlen(b)+1]; strcpy(str[1],b);
str[2]=new char [strlen(c)+1]; strcpy(str[2],c);
str[3]=new char [strlen(d)+1]; strcpy(str[3],d);
str[4]=new char [strlen(e)+1]; strcpy(str[4],e);
}
int compare::ran()
{
char *s,*t;
for (int i=0;i<4;i++)
for (int j=i+1; j<5;j++)
{
s=str[i]; t=str[j];
while (*s) if (*s==*t) {s++; t++;} else break;
if (*s>*t) {char *temp=str[i];str[i]=str[j];str[j]=temp;}
}
return 1;

}