dポイントプレゼントキャンペーン実施中!

C言語で文字を読み込んで並べ替えをしたいのですが、
void mojiSort(char *h[ ], int n){
int i, j;
char *temp;

for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp( h[j], h[i]) < 0) {
temp = h[i];
h[i] = h[j];
h[j] = temp;
}
}
}
return ;
}
とすると大文字、小文字を分けて並べ替えてしまいます。
「A」の後に「a]がくるようにするにはどうしたらよいでしょうか?

A 回答 (4件)

比較をする際に、小文字ないし大文字に両者を統一したものを比較することによって回避できると思います。

同じだった場合は大文字を先にすればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。最終的に出力したいので文字を統一すると、出力するときに文字が変わってしまうという事はないのでしょうか?
C言語は勉強を始めたばかりなのでよく分からないのですが…

お礼日時:2007/12/01 08:06

>・・C言語の勉強をしているので、・・


全くのオジャマ虫で申し訳ない。

#3回答者さまが言っているのは、以下のようではないかと・・・。

#include <ctype.h>
int str_new( char cLeft[], char cMigi[] )
{
 int iLenLeft, iLenMigi, i;

 iLenLeft = strlen( cLeft );
 iLenMigi = strlen( cMigi );

 for( i = 0; i < iLenLeft; i++ ){

  if( i > iLenMigi ) return( 1 );

  if( NULL == isalpha( cLeft[i] ) ){ // 英文字でない

   if( cLeft[i] < cMigi[i] ) return( -1 );
   if( cLeft[i] > cMigi[i] ) return( 1 );
  }
  if( NULL == isalpha( cMigi[i] ) ){ // too

   if( cLeft[i] < cMigi[i] ) return( -1 );
   if( cLeft[i] > cMigi[i] ) return( 1 );
  }
  if( toupper( cLeft[i] ) < toupper( cMigi[i] ) ) return( -1 );
  if( toupper( cLeft[i] ) > toupper( cMigi[i] ) ) return( 1 );
 }
 return( 0 ); // 同一
}
注:タブの替わりに全角空白を用いています。
    • good
    • 0
この回答へのお礼

わざわざソースをかいて頂きありがとうございました。
色々としてたらなんとかできました。

お礼日時:2007/12/01 20:27

実データは変更しません。


例えばtoupper関数は渡した文字を大文字で返します。
このときは実データは大文字に変更されません。
返り値が大文字になるだけです。
つまり、toupper関数の評価値同士を比べればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事なんとかできました。

お礼日時:2007/12/01 20:25

ロケールがサポートされている環境ならば,最初に setlocale(LC_COLLATE, ロケール名)


で英語ロケールなどを設定しておいて,strcmp() の代わりに strcoll() などを使えば,
文字コード順じゃなくてロケールの辞書順で比較してくれるはず.
(自分では使ったことないけど.)

strcoll 系関数 (MSDN)
http://msdn.microsoft.com/library/ja/vclib/html/ …

strcoll() のマニュアル (Linux)
http://www.linux.or.jp/JM/html/LDP_man-pages/man …


ただ,C言語やプログラミングの勉強のためだったら自分で #1 さんの
ような処理を実装する方がいいと思います.
    • good
    • 0
この回答へのお礼

ありがとうございます。できればC言語の勉強をしているので、shredさんのような事をしたいのですが、うまく実装できませんでした。どのような事に気をつけてするといいのでしょうか?

お礼日時:2007/12/01 08:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!