質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.51%

c言語 実行時に文字列を渡す int main(int argc, char *argv[])

受付中

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 3,582

score 12

int main(int argc, char *argv[])で、実行時に文字列を2つ読み取り、最初に入力された文字列に後から入力された文字列が含まれるかどうかをチェックするプログラムの書き方がわからないので教えて下さい。配列くらいまでしかやってないです。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

0

“実行時に文字列を2つ読み取り”というのはファイルから読み込むのでしょうか?
それとも、実行時引数…int main(int argc, char *argv[])の*argv[]なのでしょうか?
・・・コマンドがtest1だとすると >test1 abc defg とやって実行すると
argv[1]→"abc"、 argv[2]→"defg" となりますが?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/04/27 22:33

    プログラムを書いてくれというのは丸投げになりますw
    分かる範囲でいいので、自分の作ったソース
    あるいは読んだ文献など書いてくれるといいんだけど・・・
    #include <stdio.h>
    #include <string.h>

    int main(int agc, char *agv[])
    {
    if(agc != 3){
    return 1;
    }
    printf("%s:%s\n",agv[1],agv[2]);
    if(strstr(agv[1],agv[2])!=NULL){
    puts("あった!");
    }else{
    puts("なかった");
    }
    return 0;
    }

    ~/_m_m_ ./a.out abcd bc
    abcd:bc
    あった!
    ~/_m_m_ ./a.out abcd ac
    abcd:ac
    なかった
    ・・・確認して理解しないとダメですよ

    キャンセル

  • 2015/04/28 07:43

    ありがとうございます!

    キャンセル

  • 2015/04/28 07:51

    昨日あたりからCの質問が多いけど、勉強中なのかただソースがほしいのかよくわかりません。なので、最終的に自分が何がしたいのか書いてくれると、アドバイスできる事もあると思います。単発的にこれが判らないあれが判らないと言ってるより、そのほうがいいと思いますがどうでしょうか?

    キャンセル

0

実行時に文字列を2つ読み取り
これが、引数に2つの文字列を与えるという意味ならば、最初の文字列はargv[1]、2番目の文字列はargv[2]で参照できます。この場合、argcが3以上(引数が2個以上を意味する)であることを確認しておく必要があります。

文字列に文字列が含まれるかどうかは、strstr関数を使います。

実行時に文字列を2つ読み取り
が、プログラム起動後に端末などから文字列をEnterキーで入力すると言うことなら、それにはfgets関数を使います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/04/27 22:06

    できればプログラム書いて欲しいです

    キャンセル

  • 2015/04/27 22:45

    プログラムの勉強が目的で無く、そういう処理をしたいだけなら、Cでプログラムを書くという方針を改めた方が良いです。
    エディタを使うとか、スクリプト言語を使うとか。

    キャンセル

0

#include <stdio.h>

int main(int argc, char *argv[])
{
    char *s = argv[1], *t = argv[2];
    int p = 0, i;

    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] == t[p]) {
            p += 1;
        } else if (s[i] == t[0]) {
            p = 1;
        } else {
            p = 0;
        }
        if (t[p] == '\0') {
            printf("含まれます\n");
            return 0;
        }
    }

    printf("含まれません\n");
    return 0;
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/04/28 05:30

    このコードだと
    s = "bbbc", t = "bbc"
    のときの判定が正しくありませんね。
    ごめんなさい。僕の回答は無視してください。

    キャンセル

0

strstr関数を使うと楽ですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

int main(int argc, char *argv[]) {

  if (argc != 3) {
    printf("# エラー: 2 つの文字列を指定してください。\n");
    return -1;
  }
  const char * s1 = argv[1];
  const char * s2 = argv[2];

  // これは チェックしなくてもよいかもしれない
  if (strlen(s2) == 0) {
    printf("# エラー: 2 番目の文字列の長さが 0 です。\n");
    return -1;
  }

  if (strstr(s1, s2) != NULL) {
    printf("[%s] は [%s] を含んでいます。\n", s1, s2);
  } else {
    printf("[%s] は [%s] を含んでいません。\n", s1, s2);
  }
  return 0;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る