掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29428

標準ライブラリについて
投稿者---dam(2007/01/14 15:14:53)


標準ライブラリstrcmp strncpy strcat strncatと同じ仕様の関数を作成せよ。っていう問題を出されたんですけどさっぱりわかりません。
どのようにつくればいいのですか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:標準ライブラリについて 29429 ぽへぇ 2007/01/14 17:14:25


No.29429

Re:標準ライブラリについて
投稿者---ぽへぇ(2007/01/14 17:14:25)


>標準ライブラリstrcmp strncpy strcat strncatと同じ仕様の関数を作成せよ。っていう問題を出されたんですけどさっぱりわかりません。
>どのようにつくればいいのですか?
そのそれぞれの関数の仕様はわかっていますか?
(関数がどのような働きをしているか把握していますか?)


この投稿にコメントする

削除パスワード

No.29430

Re:標準ライブラリについて
投稿者---dam(2007/01/14 17:28:06)


それぞれどのようなはたらきをするのかはわかります。



この投稿にコメントする

削除パスワード

No.29431

Re:標準ライブラリについて
投稿者---ぽへぇ(2007/01/14 17:51:45)


では
>さっぱりわかりません
ではないですね。どこまで自分でやったのか
できたところまでで良いのでどれか関数を一つ、
ソースを添付してください。

「HTML変換ツール」の使用で字下げします
は守ってくださいね。

関数を作るところまでできていなければ、
アイデア、方針だけでもかまいません。



この投稿にコメントする

削除パスワード

No.29432

Re:標準ライブラリについて
投稿者---dam(2007/01/14 18:39:08)


int strcmp(const char *s1, const char *s2)
{
    while (n &amp;&amp; *s1 &amp;&amp; *s2) {
        if (*s1 != *s2)
            return ((unsigned char)*s1 - (unsigned char)*s2);
        s1++;
        s2++;
        n--;
    }
    if (!n)  return (0);
    if (*s1) return (1);
    return (-1);
}   return 0;
}


とりあえずstrcmpで作ってみました。


この投稿にコメントする

削除パスワード

No.29435

Re:標準ライブラリについて
投稿者---ぽへぇ(2007/01/14 21:11:06)


後もう少しですね。

ヒント:
 nを残す形で修正すれば strncmp になります。
 nを削除する形で修正すれば strcmp になります。
 strcmpの場合、whileを抜けた後0を返すには
  どのような判定をすればよいか考えてみてください。


この投稿にコメントする

削除パスワード

No.29533

Re:標準ライブラリについて
投稿者---ぽへぇ(2007/01/21 21:59:29)


こっちも片付けておきます。
なるべくdamさんのコードを崩さないようにした形。

int strcmp(const char* s1, const char* s2)
{
    while (*s1 && *s2) {
        if (*s1 != *s2) {
            return ((unsigned char)*s1 - (unsigned char)*s2);
        }
        s1++;
        s2++;
    }
    if (*s1 == *s2) return (0);
    if (*s1) return (1);
    return (-1);
}


また、以下を紹介します。
1.規格
http://www.jisc.go.jp/app/JPS/JPSO0020.html で
    X3010
を検索。無料の範囲では、PDF 閲覧のみ可能。
    7.21.2.4 strncpy
    7.21.3.1 strcat
    7.21.3.2 strncat
    7.21.4.2 strcmp
2.プログラミング言語 C 第2版, カーニハン, リッチー, p.59, p.129-130.
3.プログラミング言語 C 第2版 アンサーブック, トンド, ギンペル  p.111
  私の手元にあるのは昔の本なので、若干ページが前後しているかもしれませんが。




この投稿にコメントする

削除パスワード

No.29545

Re:標準ライブラリについて
投稿者---エゴプラ(2007/01/22 22:40:37)


横からすみません。質問があります。

while (*s1 && *s2){...}

上記の *s1 && *s2 が何を意味しているのかが解りません。
論理演算子?ではないと思うのですが・・・。ビット演算子にしても
いまいち意味が解らないのです。

どなたか回答お願いします。



この投稿にコメントする

削除パスワード

No.29546

Re:標準ライブラリについて
投稿者---kolona(2007/01/22 23:12:52)


>横からすみません。質問があります。
>
>while (*s1 && *s2){...}
>
>上記の *s1 && *s2 が何を意味しているのかが解りません。
>論理演算子?ではないと思うのですが・・・。ビット演算子にしても
>


論理演算子です。C言語の文字列はヌル文字(通常は数値の0)で文字列の終端を表します。
上記の場合は 「文字*s1と*s2が共にゼロでない=終端でない」
という意味です。


この投稿にコメントする

削除パスワード

No.29553

Re:標準ライブラリについて
投稿者---エゴプラ(2007/01/23 10:31:28)


kolona様、返信ありがとうございます。

私は何か勘違いをしていたみたいです。Cでは
1以外が全部falseだと勘違いしていました。お恥ずかしい
かぎりです・・・

アドバイスのおかげで理解することができました。
ありがとうございました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧