1

文字列に大文字と小文字の両方が含まれている場合に、文字列の配列をアルファベット順に並べ替える方法はありますか?

大文字のASCII値は低いため、strcmpのような関数は、常に小文字の前にあることを示します。たとえば、「ABCD」、「ZZZZ」、「turtle」、「JAVA」、「water」を並べ替えたいとします。

strcmpなどの関数を使用してこれらの文字列を並べ替えると、次のようになります。

ABCDJAVAZZZZタートルウォーター

いつあるべきか:

ABCDJAVAタートルウォーターZZZZ

4

3 に答える 3

4

比較関数として、strcasecmp または strcoll のいずれかと一緒に qsort を使用します。

strcasecmp の方が高速である可能性がありますが、strcoll の方が柔軟性が高く、非 ASCII 文字列が機能するようにプログラムのロケールを使用します。

于 2010-09-16T18:21:10.443 に答える
2

試してみてくださいstrcoll(3)

于 2010-09-16T17:48:53.643 に答える
2

厳密に 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);
}
于 2010-09-16T18:56:26.253 に答える