ページ 1 / 1
文字列の並び替え
Posted: 2012年5月16日(水) 22:52
by 素人丸
ポインタの配列を用いて初期化された5つの文字列
char *p[5] = {"Daihatsu","Hino","Mitsubishi","Toyota","Honda"};
を文字列の長さが短い順に並び替えて表示するプログラムを作りたいのですが疑問点があるので質問させていただきます。
考えた方法としてはstrlen関数を用いて長さを計算して、その長さ(数字)の大小関係を比べるのかなと思ったのですがそれをどういう風に記述すればいいのかわかりませんでした。
どうぞよろしくお願いします。
Re: 文字列の並び替え
Posted: 2012年5月16日(水) 23:01
by だんごさん
まずは自分ができる範囲のソースを作ってみてください。
strlen関数を使うのは良いと思いますよ、他にも方法はありますが。
フォーラムルールもお読みください。
Re: 文字列の並び替え
Posted: 2012年5月16日(水) 23:22
by 素人丸
コード:
#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言語は先月始めたところで素人です。
Re: 文字列の並び替え
Posted: 2012年5月17日(木) 00:18
by だんごさん
素人丸 さんが書きました:コード:
a=strlen(p[0]),b=strlen(p[1]),c=strlen(p[2]),d=strlen(p[3]),e=strlen(p[4]);
ここの部分でエラーはでませんでしたか?気のせいでしたかね…
またstrlenで得た文字列の長さを比較しなくてはなりません。
for文などの繰返し文で入れ替えをし、printf関数もfor文で繰り返し出力をすると良いでしょう。
Re: 文字列の並び替え
Posted: 2012年5月17日(木) 07:25
by beatle
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文で繰り返し処理をしてみましょう。