2d数组排序,白色空间搞乱顺序

时间:2018-03-24 15:05:19

标签: c++

美好的一天,我的排序2d阵列工作正常。但是,如果我添加空格,事情会变得混乱而且无序......

这是没有空格的正常排序

   0  1  2  3  4  5
0| a  b  c  d  e  f
1| g  h  i  j  k  l
Press any key to continue . . .

Descending

   0  1  2  3  4  5
0| l  k  j  i  h  g
1| f  e  d  c  b  a

Ascending
   0  1  2  3  4  5
1| a  b  c  d  e  f
0| g  h  i  j  k  l

但如果我将其中一个元素更改为空格并变得混乱且无序。

   0  1  2  3  4  5
0| a     c  d  e  f
1| g  h  i  j  k  l
Press any key to continue . . .

Descending

   0  1  2  3  4  5
0| l  k  j  i  h  g
1| f  e  d  c  a

Ascending
   0  1  2  3  4  5
1|    a  c  d  e  f
0| g  h  i  j  k  l

我怎么能忽略这个空格并像这样排序?

   0  1  2  3  4  5
0| a     c  d  e  f
1| g  h  i  j  k  l
Press any key to continue . . .

Descending

   0  1  2  3  4  5
0| l  k  j  i  h  g
1| f  e  d  c    a

Ascending

   0  1  2  3  4  5
1| a     c  d  e  f
0| g  h  i  j  k  l

这是我的代码:

#include<iostream>
#include<string>

std::string myarray[3][6] = {{"a","b","c","d","e","f"},
                            {"g","h","i","j","k","l"},
                            {" "," "," "," "," "," "}}; //i made some allowance so that i can insert/delete


void display();

using namespace std;

int main(){

    int Rows = 2;
    int Cols = 6;

    display();
    system("pause");

    //buble sort, ascending
    cout<<"\nDescending" <<endl;
    for(int x = 0; x<2; x++){
        for(int y = 0; y<6;y++){
            for(int z = 0;z<Cols*Rows-1; z++){
                if(myarray[0][z]<myarray[0][z+1])
                swap(myarray[0][z],myarray[0][z+1]);
            }
        }
    }

  display();


  cout<<"\nAscending" <<endl;

    for(int z = 0; z<6; z++){
        cout<<"  "<<z;
    }
    cout<<endl;

    for(int x = 1; x>=0; x--){
    cout<<x <<"|";
        for(int y = 5; y>=0; y--){
            cout<<" " <<myarray[x][y] <<" "; 
        }
    cout<<endl;
    }


}

//display
void display(){

    cout<<endl;
    for(int z = 0; z<6; z++){
        cout<<"  "<<z;
    }
    cout<<endl;

    for(int x = 0; x<2; x++){
    cout<<x <<"|";
        for(int y = 0; y<6; y++){
            cout<<" " <<myarray[x][y] <<" "; 
        }
    cout<<endl;
    }
}

1 个答案:

答案 0 :(得分:0)

你不能

这些结果并非“凌乱而乱序”&#34 ;;计算机完全按照你的要求去做:对元素进行排序。默认情况下,' '出现在所有字母之前。

通过调整排序算法以使用基本char < char比较之外的其他内容,您可以使' '进入排序顺序中的其他特定位置(永远不会更改),但是您的计算机无法猜测你是否意味着它代表'b',或'l',或'z'或其他任何角色。这与#34;相反,忽略了空白&#34;。

如果元素将始终是拉丁字母的成员, if 只会有一个空格,而 if 则会只有字母表中缺少一个字母,然后你可以做一个预先排序步骤,将空白变成丢失的字母字符,然后排序,然后我想再将字符改回一个空格。但是:(a)老实说,为什么? (b)排序算法本身保持不变。