文字列の並び替え

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
素人丸

文字列の並び替え

#1

投稿記事 by 素人丸 » 14年前

ポインタの配列を用いて初期化された5つの文字列
char *p[5] = {"Daihatsu","Hino","Mitsubishi","Toyota","Honda"};
を文字列の長さが短い順に並び替えて表示するプログラムを作りたいのですが疑問点があるので質問させていただきます。
考えた方法としてはstrlen関数を用いて長さを計算して、その長さ(数字)の大小関係を比べるのかなと思ったのですがそれをどういう風に記述すればいいのかわかりませんでした。
どうぞよろしくお願いします。

だんごさん
記事: 273
登録日時: 14年前

Re: 文字列の並び替え

#2

投稿記事 by だんごさん » 14年前

まずは自分ができる範囲のソースを作ってみてください。
strlen関数を使うのは良いと思いますよ、他にも方法はありますが。

フォーラムルールもお読みください。
 Dango San

素人丸

Re: 文字列の並び替え

#3

投稿記事 by 素人丸 » 14年前

コード:

#include <stdio.h>
#include <string.h>
main(){
char *p[5] = {"Daihatsu","Hino","Mitsubishi","Toyota","Honda"};
int a,b,c,d,e;
a=strlen(p[0]),b=strlen(p[1]),c=strlen(p[2]),d=strlen(p[3]),e=strlen(p[4]);
printf("%s %s %s %s %s\n", p[0],p[1],p[2],p[3],p[4] );
}
 
今はこういう状況です。
大小比較をしようとしたのですが、ポインタで置いた意味がないのかな?とか思ったりどうもうまくいきません。
c言語は先月始めたところで素人です。

だんごさん
記事: 273
登録日時: 14年前

Re: 文字列の並び替え

#4

投稿記事 by だんごさん » 14年前

素人丸 さんが書きました:

コード:

a=strlen(p[0]),b=strlen(p[1]),c=strlen(p[2]),d=strlen(p[3]),e=strlen(p[4]);
 
ここの部分でエラーはでませんでしたか?気のせいでしたかね…

またstrlenで得た文字列の長さを比較しなくてはなりません。
for文などの繰返し文で入れ替えをし、printf関数もfor文で繰り返し出力をすると良いでしょう。
 Dango San

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 文字列の並び替え

#5

投稿記事 by beatle » 14年前

No.3でご提示のソースコードを元にいくつかヒントを出します。

1.インデントをきちんとしてください。あなたのためだけではなく、このスレッドを見ようとするすべての人のためです。
インデントが何かよく分からないなら、投稿前チェックリストのチェック2とチェック3を御覧ください。

2.「カンマ演算子」のきちんとした効果を知っているならいいですが、知らずに

コード:

a=strlen(p[0]),b=strlen(p[1]),c=strlen(p[2]),d=strlen(p[3]),e=strlen(p[4]);
と書くのはやめましょう。

コード:

a = strlen(p[0]);
b = strlen(p[1]);
c = strlen(p[2]);
d = strlen(p[3]);
e = strlen(p[4]);
こう書くのが素直です。

3.現在は文字列は5個で固定ですが、もし100個になった場合も考えてプログラムを作ってみましょう。
文字列へのポインタを配列に入れて扱うのは正解です。
しかし、strlenの結果は個別の変数に入れてますね。それも配列にしちゃいましょう。

4.forを使いましょう。
文字列へのポインタと文字列の長さを両方とも配列で管理するようにしたら、今度はfor文で繰り返し処理をしてみましょう。

閉鎖

“C言語何でも質問掲示板” へ戻る