注册 登录
编程论坛 C++教室

帮忙看看啊,谢谢

lianjiecuowu 发布于 2011-07-01 11:34, 526 次点击
#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
#include<string>
using namespace std;
class lei
{
private:
    string str1;
    string str2;
public:
    void set_str1(string s)
    {
        if(!s.empty())
            str1=s;
        else
            str1="";
            
    }
    void set_str2(string s)
            {
        if(!s.empty())
            str2=s;
        else
            str2="";
            
    }
    string get_str1()
    {
        return this->str1;
    }
    void show()
    {
        cout<<str1<<'\t'<<str2<<endl;
    }

};
/*
int main()
{
    list<lei> ls;
    const int N=5;
    string a;
    lei b;
    vector<lei> vec;
    int i;
    for(i=0;i<N;i++)
    {
        cout<<"input string str1"<<endl;
        cin>>a;
        b.set_str1(a);
        cout<<"input string str2"<<endl;
        cin>>a;
        b.set_str2(a);
        vec.push_back(b);
    }
    vector<lei>::iterator it_v=vec.begin();
    vector<lei>::iterator it_end=vec.end();
    for(;it_v!=it_end;++it_v)
    {
        if(!ls.size())
            ls.push_back(*it_v);
        else
        {
            list<lei>::iterator it=ls.begin();
            list<lei>::iterator iter=ls.end();
            list<lei>::iterator it2=ls.end();
            it2--;
            if(it_v->get_str1().c_str()<it->get_str1().c_str())
                ls.push_front(*it_v);
            else if(it_v->get_str1().c_str()>it2->get_str1().c_str())
                ls.push_back(*it_v);
            else
            {
                for(it=ls.begin();it!=iter;++it)
                {
                    if(it_v->get_str1().c_str()<it->get_str1().c_str())
                    {
                        ls.insert(it,*it_v);
                        break;
                    }

                }
            }
        }
    }
    list<lei>::iterator it=ls.begin();
    list<lei>::iterator iter=ls.end();
    for(;it!=iter;++it)
        (*it).show();
    cout<<endl;
    system("pause");
    return 0;
}
*/
int main()
{
    list<lei> ls;
    const int N=5;
    string a;
    lei b;
    vector<lei> vec;
    int i;
    for(i=0;i<N;i++)
    {
        cout<<"input string str1"<<endl;
        cin>>a;
        b.set_str1(a);
        cout<<"input string str2"<<endl;
        cin>>a;
        b.set_str2(a);
        vec.push_back(b);
    }
    vector<lei>::iterator it_v=vec.begin();
    vector<lei>::iterator it_end=vec.end();
    for(;it_v!=it_end;++it_v)
    {
        if(!ls.size())
            ls.push_back(*it_v);
        else
        {
            list<lei>::iterator it=ls.begin();
            list<lei>::iterator iter=ls.end();
            list<lei>::iterator it2=ls.end();
            it2--;
            if(it_v->get_str1()<it->get_str1())
                ls.push_front(*it_v);
            else if(it_v->get_str1()>it2->get_str1())
                ls.push_back(*it_v);
            else
            {
                for(it=ls.begin();it!=iter;++it)
                {
                    if(it_v->get_str1()<it->get_str1())
                    {
                        ls.insert(it,*it_v);
                        break;
                    }

                }
            }
        }
    }
    list<lei>::iterator it=ls.begin();
    list<lei>::iterator iter=ls.end();
    for(;it!=iter;++it)
        (*it).show();
    cout<<endl;
    system("pause");
    return 0;
}


里面有两个main()函数,注释掉的那个是有问题的,输入的字符串无法按照升序的顺序排列输出,而下边的那个则可以,问题是string还要不要转换成char型进行比较,转换成char型,排序输出就是错的,不进行转换直接按string类型比较结果就是正确的
5 回复
#2
yinchaoji22011-07-01 12:05
正关注。
#3
ToBeStronger2011-07-01 12:10
1.string类型能比较大小是因为#include<string>里有写好的string排序,使用<时,就调用默认的operator <;char型怎么比较?这样肯定不对
2.楼主直接在class lei里写个谓词排序,然后ls.sort()直接就完事了...
#4
zhongjiezhe2011-07-02 16:39
回复 3楼 ToBeStronger
排序可选择按str1排序和str2排序,用sort该怎么处理呢
#5
ToBeStronger2011-07-02 17:51
回复 4楼 zhongjiezhe
只需要在class lei写一个operator函数,我只需申明一个string变量时str1,然后将str1按照顺序输出
bool operator <(const ContactItem& itemToCompare)const
{
    return(this->str1<itemToCompare.str1);
}
#6
zhongjiezhe2011-07-03 19:47
回复 5楼 ToBeStronger
谢谢,明白了,以前对c++的认识太表面了,向你学习
1