noip1998 拼数-练习类

写的丑死


未AC

搞不懂


//#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;


class LINT
{
    friend ostream& operator<<(ostream& out, LINT& e);
private :
    char num[100];
public  :
    LINT(){num[0]='\0';}
    LINT(char *m){strcpy(num,m);}
    LINT(int a);
    bool operator>(const LINT& m);
    
};
/*
功能:初始化
输入:int a
输出:
日期:
*/
LINT::LINT(int a)
{
    if (a==0) { num[0]='0';num[1]='\0';return;}
    int i=0;
    while (a)
    {
        num[i++] =  a % 10;
        a /= 10;
    }
    num[i]='\0';
    int len = strlen(num);
    for (i=0; i<strlen(num); i++)
    {
        char tmp = num[len-i-1];
        num[len-i-1] = num[i];
        num[i] = tmp;
    }
    return;
}
/*
功能:重载运算符
输入:LINT a,b
输出:a>b 成立 1 否则 0
日期
*/
bool LINT::operator>(const LINT &m)
{
    return strcmp(num, m.num)>0;
}
/*
功能:重载输出运算符
输入:LINT e
输出:
日期:
*/
ostream& operator<<(ostream &out, LINT& e)
{
    out<<e.num;
    return out;
}



class LIST
{
private :
    LINT n[100];
    int len;
public:
    LIST(int n=0){len=n;}
    void Add(LINT e);
    void Sort();
    void Print();
    LINT GetAt(int i){return n[i];}
    int GetLen(){return len;}
};
/*
功能:Add
输入:LINT e
输入:无
日期:
*/
void LIST::Add(LINT e)
{
    n[len++]=e;
}

/*
功能:Sort 从大到小
输入:无
输入:无
日期:
*/
void LIST::Sort()
{
    int i,j;
    for (i=0; i<len; i++)
    {
        for (j=0; j<len-1-i; j++)
        {
            if (n[j+1]>n[j])
            {
                LINT tmp = n[j+1];
                n[j+1] = n[j];
                n[j]=tmp;
            }
        }
    }
}

/*
功能:输出显示
输入:无
输出:无
日期:
*/
void LIST::Print()
{
    for (int i=0; i<len; i++) cout<<"第 "<<i<<" :值:"<<n[i]<<endl;
}

class STRING
{
    friend istream& operator>>(istream &in,STRING& str);
    friend ostream& operator<<(ostream &out,STRING& str);
private :
    char n[1000];
public :
    STRING(){n[0]='\0';}
    STRING* Split(char a);
    int GetLen();
    char * ConvertToCharArray();
};

int STRING::GetLen(){return strlen(n); }
STRING* STRING::Split(char a)
{
    STRING* pStr = new STRING[100];
    int k=0,kp=0;
    int len = strlen(n);
    for (int i=0; i<len; )
    {
        while(n[i]==a && i<len) i++;//找到第一个非空格
        kp=0;
        while (n[i]!=a&&i<len) 
        {
            pStr[k].n[kp++]=n[i++];
        }
        pStr[k++].n[kp]='\0';		
    }
    
    return pStr;
}
istream& operator>>(istream&in ,STRING&str)
{
    gets(str.n);
    return in;
}
ostream& operator<<(ostream&out, STRING&str)
{
    out<<str.n;
    return out;
}
char * STRING::ConvertToCharArray()
{
    char * p = new char [1000];
    strcpy(p,n);
    return p;
}

int main()
{
    LINT a("123") ;
    LINT b("45");
    LINT c("132");

    LIST lst;

    

    int k;
    cin>>k;
    getchar();
    STRING str;
    cin>>str;
    STRING * pStr = str.Split(' ');

    int i=0;
    while ( pStr[i].GetLen() >0)
    {
            char *p = pStr[i].ConvertToCharArray();
            lst.Add(p);
            delete p;
            i++;
    }
    lst.Sort();
    
    for (int i=0; i<lst.GetLen(); i++)
    {
        LINT p = lst.GetAt(i);
        cout<<p;
    }
    cout<<endl;
    

    delete pStr;
    

    //system("pause");
    return 0;
}


猜你喜欢

转载自blog.csdn.net/legan/article/details/80301575