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

请高手找程序错误,急!!!

野兽男孩Andy 发布于 2012-06-26 15:22, 712 次点击
开发一个排序程序,用户输入长度(数据个数)可变的数据,输入字母,则按字符排序;输入数字,则按数字排序;输入字母和数字的混合数据,则首先区分数字和字母,然后各自排序
#include<iostream.h>
void sort(char[]);
void sort(int[]);
void sort1(char[]);
void sort1(int[]);
const int N=20;
void main()
{
    char a[N],b[N],c[N],d[N]={'\0'},f[N]={'\0'};
    cout<<"input the array:";
    cin>>a>>b>>c;
    sort(a);
    sort(b);
    sort1(d);
    sort1(f);
    int j=0,k=0;
    for(int i=0;i<=N,j!='\0',k!='\0';i++,j++,k++)   
        if(c[i]>='0'&&c[i]<='9')
        {
       d[j]=c[i];
        }                                                
        if((c[i]>='a'&&a[i]<='z')||(c[i]>='A'&&a[i]<='Z'))
        {
            f[k]=c[i];
        }
    cout<<"after sorted,the string is: "<<a<<"\t"<<b<<"\t"<<d<<"\t"<<f<<endl;
}

void sort(char x[])
{
    char t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort(int x[])
{
    int t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(char x[])
{
    char t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(int x[])
{
    int t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
7 回复
#2
liudw22012-06-26 22:53
少了using namespace std;了!少年。。。
#3
rjsp2012-06-27 08:24
请高手找程序错误,急!!!
----- 你先得告诉别人哪里有错,如果是编译链接出错,贴出编译器给出的错误信息;如果是运行结果不符合你的预期,给出运行结果以及你的预期结果。
#4
野兽男孩Andy2012-06-28 08:09
回复 2楼 liudw2
include后面的.h和你说的那个是不是一个意思啊
#5
lxqlyld2012-06-29 14:33
我用的是C++ Builder 6.0开发环境,帮你改了一下,主要就两点错误:你用了泛型算法sort(),需要包含头文件#include<algorithm>;另外一个就是变量i,你每次都是在for循环中定义,这样的定义在for循环之外是不可见的,我是在你每一个函数中帮你定义了一次,定义在for循环之外,这样比较麻烦,但是可以的;变量i在你程序中出现的比较多,以后遇到这样的情况最好在全局域中定义它,省的一次一次的定义。
改好的程序:
#include<iostream.h>
#include<algorithm>
void sort(char[]);
void sort(int[]);
void sort1(char[]);
void sort1(int[]);
const int N=20;
void main()
{
    char a[N],b[N],c[N],d[N]={'\0'},f[N]={'\0'};
    cout<<"input the array:";
    cin>>a>>b>>c;
    sort(a);
    sort(b);
    sort1(d);
    sort1(f);
    int j=0,k=0,i;
    for(i=0;i<=N,j!='\0',k!='\0';i++,j++,k++)
        if(c[i]>='0'&&c[i]<='9')
        {
       d[j]=c[i];
        }
        if((c[i]>='a'&&a[i]<='z')||(c[i]>='A'&&a[i]<='Z'))
        {
            f[k]=c[i];
        }
    cout<<"after sorted,the string is: "<<a<<"\t"<<b<<"\t"<<d<<"\t"<<f<<endl;
}

void sort(char x[])
{
    char t;
    int i;
    for(i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort(int x[])
{
    int t;
    int i;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(char x[])
{
    char t;
    int i;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(int x[])
{
    int t;
    int i;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
#6
jiantiewen2012-06-29 18:59
回复 2楼 liudw2
#include <iostream.h>可直接使用cin,cout,endl等流对象。#include <iostream>则要先using namespace std;
#7
梦ambious2012-06-29 21:49
没错呀,我用的VC 6.0
#8
jiantiewen2012-06-29 23:12
我用VS2008和VS2010编译运行过,不知楼主到底是指什么错?
1