【问题标题】:Sort with strcmp and bubblesort a 2d array in C在 C 中使用 strcmp 和冒泡排序二维数组
【发布时间】:2015-01-31 09:53:27
【问题描述】:

我需要使用字典排序按行对给定的二维数组(char crossword[40][20])进行排序。
填字游戏[40][20] 包含:

TYPE
GUITARIST
VAIN
ROME
MARRIAGE
NOODLE
ANT
IN
PETROL
CUT
LIE
ATOM
MOUTH
ENVELOPE
IN
AT
AGE
ART
INTERIOR
AT
ROBBERY
AT
AIR
STIR
NO
IT
SMILE
NIGHT
ACE
MANDATORY
TO
NY
DO
OZONE
ON
UNDERWATER
NOUN

所以填字游戏[0][columns]=TYPE,填字游戏[1][columns]=GUITARIST 等
并且必须像这样转换为字典顺序:

ACE  
ANT  
...  
...  
...  
VAIN

我当然知道如何对 1d 数组进行冒泡排序,但是像上面的 2d 会发生什么?
我只想要线条,所以单词的字母保持原样。 如果代码包含 strcmp,我将不胜感激。

【问题讨论】:

  • @Konstantinos,因为我目前手头没有 C 编译器,所以我不想发布解决方案,因为我无法测试它们,如果您遇到问题,请告诉我在哪里,我会尝试并更新我的答案以反映它。

标签: c arrays sorting multidimensional-array


【解决方案1】:

int strcmp ( const char * str1, const char * str2 );

str1 < str2 返回一个负值,为str1 > str2 返回一个正值,为str1 = str2 返回一个零值。

这听起来很有用。请记住,C 中的单词只是 char 数组。因此,我们可以遍历为索引执行 strcmp (...) 的单词。

现在我们对一维数组中的整数排序几乎处于同一水平。

我们还需要一个临时变量(就像整数的标准冒泡排序一样)。交换对象时记得使用strcpy()

所以我们的代码看起来像

#define MAX 40

int i, j;

char temp[20];
for (i = 0; i < MAX-1; ++i)
{
    for (j = i+1; j < MAX; ++j)
    {
        if (strcmp (words[i], words[j]) > 0)
        {
            strcpy (temp, words[i]);
            strcpy (words[i], words[j]);
            strcpy (words[j], temp);
        }
    }
}

注意:- 尚未经过我的测试。

【讨论】:

  • 两个东西,如果相等,就不用动了。我想你的意思也是i != j。否则,您只会将单词与自身进行比较。
  • 错误是什么?我可以将其添加到答案中。您也不需要i != j,因为j 将始终是上面的一个值。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2010-12-23
  • 1970-01-01
  • 2014-06-10
  • 2021-10-31
相关资源
最近更新 更多