Сортировка массива строк с заглавными и строчными буквами в C - PullRequest
0 голосов
/ 16 сентября 2010

Есть ли способ сортировки массива строк в алфавитном порядке, где строки содержат как заглавные, так и строчные буквы?

Поскольку заглавные буквы имеют более низкое значение ASCII, функции, такие как strcmp, всегда будут показывать, что перед строчными буквами.Например, допустим, мы хотели отсортировать «ABCD», «ZZZZ», «черепаха», «JAVA», «вода».

При использовании таких функций, как strcmp для сортировки этих строк, оно становится:

вода черепахи ABCD JAVA ZZZZ

, когда должно быть:

черепаха ABCD JAVAвода ZZZZ

Ответы [ 3 ]

3 голосов
/ 16 сентября 2010

Используйте qsort с strcasecmp или strcoll в качестве функции сравнения.

strcasecmp, вероятно, будет быстрее, но strcoll более гибок и использует языковой стандарт программ, так что работают не-ASCII-строки.

2 голосов
/ 16 сентября 2010

Попробуйте strcoll(3).

1 голос
/ 16 сентября 2010

простое собственное решение в строго C89 должно помочь:

#include <ctype.h>
#include <string.h>

int strcmpIgnoreCase(const char *a,const char *b)
{
  while( *a && *b )
  {
    register r=tolower(*a)-tolower(*b);
    if( r )
      return r;
    ++a;
    ++b;
  }
  return tolower(*a)-tolower(*b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...