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

求人指点,自学c++难啊

zr1234561555 发布于 2009-07-22 16:15, 711 次点击
为5个国家名字排顺序,我自己写了个,怎么运行时有时是对的,有时是错的
#include <iostream.h>
#include <string.h>
#define M 5
#define N 20
void main()
{
    char name[M][N]={'\0'},t[M][N]={'\0'};
    int i,j,p,b,x;
    for (i=0;i<=4;i++)
    {
        cout<<"请输入一个国家的名字";
        cin>>name[i];
    }
    for (j=0;j<=3;j++)
    {
        for (p=j+1;p<=4;p++)
        {
            if (name[j][0]>=name[p][0])
            {
                for (b=0;b<N;b++)
                {
                    t[p][b]=name[j][b];
                    t[j][b]=name[p][b];
                }
            }
        }
    }
    for (x=0;x<=4;x++)
    {
        cout<<"排好序的国家名字为"<<x+1<<":"<<t[x]<<endl;
    }
}
9 回复
#2
zhangwanzhou2009-07-22 16:32
我编译都不能通过
名空间不需要写 ?
#3
ET_bug2009-07-23 14:06
LZ你的是什么排序算法呀。。好像不能达到完全排序的目的吧
我改了下,但不知为何会自动退出,只有加个断点才能看到排序结果。。。
#include <iostream.h>
#include <string>
using namespace std;
#define M 5
void main()
{
    string name[M];
    int i,j,p,x;
    for (i=0;i<=4;i++)
    {
        cout<<"请输入一个国家的名字:";
        cin>>name[i];
    }

    for (j=0;j<=3;j++)
    {
        for (p=j+1;p<=4;p++)
        {
    if (name[j]>=name[p])
            {
        name[j].swap(name[p]);//交换字符串
            }
        }
    }
    for (x=0;x<=4;x++)
    {
        cout<<"排好序的国家名字为"<<x+1<<":"<<name[x]<<endl;
    }

}
#4
ET_bug2009-07-23 14:08
结果如下:
请输入一个国家的名字:ser
请输入一个国家的名字:sxe
请输入一个国家的名字:yryr
请输入一个国家的名字:huu
请输入一个国家的名字:csa
排好序的国家名字为1:csa
排好序的国家名字为2:huu
排好序的国家名字为3:ser
排好序的国家名字为4:sxe
排好序的国家名字为5:yryr
#5
金多虾2009-08-02 08:51
( ^_^ )不错嘛
#6
sadan201112009-08-02 22:20
#include<iostream>
#include<string>
using namespace std;

int main()
{
string coun[5];
int i,p;
for(i=0;i<=4;i++)
{cout<<"请输入国家名称"<<endl;
cin>>coun[i];
}
for(p=0;p<=3;p++)
{
    for(i=p+1;i<=4;i++)
    {
    if(coun[p]<=coun[i])
    {
    coun[p].swap(coun[i]);
    }
    }
}
for(i=0;i<=4;i++)
{
    cout<<" 第"<<i+1<<"位国家为"<<coun[i]<<endl;
}
return 0;

}
和3楼的想法一样,只是好像我不会自动退出...用string类型设字符,比较变得简单一点
#7
sadan201112009-08-02 22:23
还有排序和3楼是相反的,应该是字母靠后的比较大把,string类型设字符比较字符是按照字典顺序排的,对不住,应该将if(coun[p]<=coun[i])
改为if(coun[p]>=coun[i])
#8
CrystalFan2009-08-03 16:01
楼主,你只对每个国家进行了按第一个字母排序,如果输入中含有第一个字母相同的,你的程序就只会交换他们的位置,不管他们谁“大”。
#9
zwei_02009-08-04 10:27
领教了
#10
Kiu2009-08-04 15:08
以下是引用ET_bug在2009-7-23 14:06的发言:

LZ你的是什么排序算法呀。。好像不能达到完全排序的目的吧
我改了下,但不知为何会自动退出,只有加个断点才能看到排序结果。。。
#include <iostream.h>
#include <string>
using namespace std;
#define M 5
 ...

请问下   这位大虾    你所写的代码可以运行吗?    你有试过吗?
1