2017-04-01 61 views
1

我想根据它们的长度对包含名称的数组进行排序,但是当我尝试使用函数交换它们时,以下程序会给出编译器错误。请帮助我确定我的错误。在C++中使用2d数组交换

void sort(char name1[][50]) 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     if (strlen(name1[i])>strlen(name1[i+1])) 
     { 
      char temp[50]; 
      temp=name1[i]; 
      name1[i]=name1[i+1]; 
      name1[i+1]=temp;  
     } 
    } 
} 
+0

如果使用'std :: string',它会更容易做到。 –

+0

请注意,这不是一个完整的排序。一般来说,您需要对数组进行多次传递才能完全排序数据。如果你传入['“abcde”','“abcd”','“abc”','“ab”','“a”'],那么输出将是['“abcd”'''abc “','”ab“',''a”','“abcde”']。 –

回答

0

使用strcpy()到一个阵列复制到其它

void sort(char name1[][50]) 
{ 

    for(int i=0; i< 5; i++) 
    { 
     if(strlen(name1[i])>strlen(name1[i+1])) 
     { 
     char temp[50]; 
     strcpy(temp,name1[i]); 
     strcpy(name1[i],name1[i+1]); 
     strcpy(name1[i+1],temp);  
     } 
    } 
} 
+0

谢谢,你能让我多了解一些简单的东西,为什么我们可以在多维数组中使用循环中的两个维度输入输入,如下所示: \t for(int i = 0; i <5; i ++ ) \t { \t \t \t \t cout <<“enter name”<< i + 1; \t \t cin >> names [i] [50]; \t} – mwbee

+0

@mwbee你需要写cin >> names [i],因为你输入的名字是由名字[i]引用的。例如names [0],指的是名字,名字[1]指的是第二个名字。 –

+0

@mwbee如果有帮助,可以将其标记为正确,以使其对其他用户更有用 –

0

使用strcpy复制的c-字符串。首先将第一个字符串复制到临时字符串中,然后将第二个字符串复制到第一个字符串中,最后将temp复制到第二个字符串中。

strcpy(temp,name1[i]); 

strcpy(name1[i],name1[i+1]); 

strcpy(name1[i+1],temp); 
+0

谢谢,请你让我知道更多简单的东西,为什么我们可以在多维数组中使用循环中的两个维度输入数据,如下所示:for(int i = 0; i <5; i ++ ){cout <<“输入名称”<>名称[i] [50]; } – mwbee