掲示板利用宣言

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

 私は

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

掲示板2

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

No.26651

strstr関数について
投稿者---Mika(2006/04/19 15:33:39)


下記プログラムの/* ? */部分の意味がどうしても解りません。ご教示お願いします。

/*
    strstr関数の利用例
*/

#include <stdio.h>
#include <string.h>

int main(void)
{
    char  s1[80], s2[80];
    char  *p;

    printf("文字列s1 : ");   scanf("%s", s1);
    printf("文字列s2 : ");   scanf("%s", s2);

    p = strstr(s1, s2);

    if (p == NULL)
        printf("文字列s1中には文字列s2は存在しません。\n");
    else {
        int   ofs = p - s1;               /* ? */
        printf("\n%s\n",  s1);
        printf("%*s|\n",  ofs, "");       /* ? */     
        printf("%*s%s\n", ofs, "", s2);   /* ? */
    }

    return (0);
}



◎実行環境
Windows XP Home Edition
Visual C++.NET 2003


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:strstr関数について 26652 nop 2006/04/19 16:12:29
<子記事> Re:strstr関数について 26654 mugu 2006/04/19 21:00:06


No.26652

Re:strstr関数について
投稿者---nop(2006/04/19 16:12:29)


> int ofs = p - s1; /* ? */

発見した文字列が、検索元文字列の何文字目にあったかを算出する。

> printf("%*s|\n", ofs, ""); /* ? */

発見文字列の下に「|」を出力する。

> printf("%*s%s\n", ofs, "", s2); /* ? */

発見文字列の下に、入力された検索文字列を出力する。


この投稿にコメントする

削除パスワード

No.26654

Re:strstr関数について
投稿者---mugu(2006/04/19 21:00:06)


ともじさん、みなさま、Mikaさん始めまして。
先週あたりからサイトを参考にさせていただき、
C言語を勉強している mugu といいます。

よろしくお願いいたします。

意味はnopさんがかかれているので、

> printf("%*s|\n", ofs, ""); /* ? */
> printf("%*s%s\n", ofs, "", s2); /* ? */

この2行ですが、『*』をつかったフィールド幅の指定になります。


例えば『 printf("%5d\n", 1); 』は、わかりますか?

ためしに、下の感じでのプログラムをやってみてください。
printf("%5d\n", 1);
printf("%*d\n", 5,1);

*をつかうと、対応する引数をフィールド幅にしてくれます。
(※「printf フィールド アスタリスク」あたりで調べてくださいませ)




この投稿にコメントする

削除パスワード

No.26671

Re:strstr関数について
投稿者---Mika(2006/04/21 15:09:27)


nopさん、muguさん、どうもありがとうございました。
お二人の的確なご回答により、疑問点が解消しました。
感謝致します。



この投稿にコメントする

削除パスワード

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