- ベストアンサー
文字列を比較するプログラムなんですが…
同じ長さの文字列2個(s1、s2)を辞書的に比較してs1>=s2なら1、s1<s2なら0を返すプログラムを作成せよ。 尚、文字列は小文字でポインタを使う事。 s1がab、s2がacと入力されたならs1>s2となります。 という問題がだされたんですが全くわかりません…。 どなたかご助力お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
noboru2000さんもjactaさんも正しい回答です。 しかし、この問題の真意は「ポインタを使って比較をするプログラムを作成せよ」だと思います。 ということは、strcmp()などの標準関数を使っては作成したことにはなりません。 なのでプログラムは以下のようになります。 ---------------------------------------------------------------- #include <stdio.h> int func( const char *s1, const char *s2 ); void main() { char s1[ 256 ]; char s2[ 256 ]; int ret; // 文字列の入力 printf("文字列1="); gets( s1 ); printf("文字列2="); gets( s2 ); // 比較処理 ret = func( s1, s2 ); // 結果の表示 printf("結果=%d\n", ret ); } int func( const char *s1, const char *s2 ) { // s1の文字列の長さだけ繰り返す while( *s1 != '\0' ) { // C言語の文字比較では 'a' < 'b' になるので // ここでの比較は(s1の参照文字 > s2の参照文字)となります if( *s1 > *s2 ) { // (s1 < s2)なので0を返す return 0; } // 次の文字を参照 s1++; s2++; } // (s1 >= s2)なので1を返す return 1; } ---------------------------------------------------------------- 理解できたでしょうか(^_^) まだ分からないことがありましたら 追って連絡をください。
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
1. char* p1 = s1; char* p2 = s2; 2. *p1 == '\0' || *p2 == '\0' なら '\0' だった方が小さい 3. *p1 < *p2 なら s1が小さい 4. *p1 > *p2 なら s2が小さい 5. *p1 == *p2 なら ++p1; ++p2; して[2]に戻る
お礼
なるほど~。 家にはC++のコンパイラがないので今度学校で試してみようと思います!。ありがとうございました(^-^。
- nshooter
- ベストアンサー率25% (2/8)
うふふ。これ学校の宿題でしょ?ここで手伝ってもらうのもいいけれど、 これはC言語の初歩の初歩。どんな初心者向けの入門書にもこの程度の 事は書いてあります。まさにこのプログラムで良いんですが、まったく 同じものを自分で見つけられるようにならないと、次の宿題困りますよ。
お礼
はい、そうなんですよ…(^-^;。 一応最初は自力で調べてたんですけど見つけることができなくて…。 自分の力不足ですよね…。 春休みにまた最初からプログラムの勉強します!。
- jacta
- ベストアンサー率26% (845/3158)
文字コード順による単純比較ではなく、「辞書的に」というのが気になります。「辞書的に」というのは、具体的にはどのようなことを想定しているのでしょう? 多バイト文字のことなどもあわせて考えると、最も近いのはstrcollを使うことかもしれません。 C++であれば、collate<T>::compareまたはlexicographical_compareに適切な比較関数オブジェクトを指定することになると思います。 まあ、多分そこまで要求されていないとは思いますが...
お礼
比較関数オブジェクトは使っちゃいけないことになってるんですよ。 それを使えば簡単に出来るんですが使えないので悩んます…。
- noboru2000
- ベストアンサー率33% (47/140)
strcmp() で比較した結果を利用すればいいと思います。
お礼
確かにその関数を使えば簡単にできます でもその関数を使っちゃいけないんですよ(><)。
お礼
ありがとうございます!。 レポート提出期限にも間に合いホントに助かりました。 ちゃんと理解もできました~(^-^。