C言語 文字列の大文字変換について 下記の何が間違っているのでしょうか・・・ 大文字変換ができません。 ソートはできています。

画像

C言語関連 | プログラミング34閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

その他の回答(2件)

0

1. 問題文を素直に読めば、順番がおかしいです。 個々の文字列を大文字にする が先。 ソートはその後。 2. toupper しているforループは、基本的な考え方 が、成り立ってないです。 tuoupper は 1 文字受け取って1文字返すもの。 本質的に二重ネストなループになるはず。 ・argv の複数文字列の個々について ・・注目個々文字列内の全文字について そもそも、このプログラム、コンパイルできたのですか? ポインタ, 文字配列... 混乱しています。 たとえば tmp は ポインタの配列 になってて、 strcpyの第一引数にはなり得ない。 一気にやるのは無理に見えます。 分割して一歩ずつ進めたらどうですか。 たとえば、argv 全部の大文字変換 だけ先にやる。 その後、ソートにとりかかる。 P.S. ch も tmp も、要らないです。 argv というポインタ配列、その個々が指し示す文字配列 実体、いずれも既に用意され存在しているからです。 ソートもポインタを交換すれば済むので、文字列全体を 入れ換えるとか値コピーするとか、不要です。

0

問題は文字列をソートするので、コマンドラインの順番を並べかえるのではないと思います。 またコマンドラインの文字列は、スタックにあるので直接書き換えてもかまいません。 テキストの文字のソートは簡単ではなく、文字コードは'Z' < 'a'なので、ソートの前に大文字に変換します。 char *parg; int size_s; for (parg = argv[i]; *parg != '\0'; parg++) *parg = toupper(*parg); // 文字列の最後の'\0'を含まない文字数 size_s = parg - argv[i] - 1; // バブルソートの例 parg = argv[i]; for (int j = 0; j < size_s; j++) for (int k = size_s; k >= j + 1; k--) if (parg[k] < parg[k - 1]) { char temp; temp = parg[k]; parg[k] = parg[k - 1]; parg[k - 1] = temp; }