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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

5回答

4582閲覧

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

trumpet0213

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2015/04/27 12:46

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

lang

1#include <stdio.h> 2#include <string.h> 3 4int main(int argc, char *argv[]) { 5 6 if (argc != 3) { 7 printf("# エラー: 2 つの文字列を指定してください。\n"); 8 return -1; 9 } 10 const char * s1 = argv[1]; 11 const char * s2 = argv[2]; 12 13 // これは チェックしなくてもよいかもしれない 14 if (strlen(s2) == 0) { 15 printf("# エラー: 2 番目の文字列の長さが 0 です。\n"); 16 return -1; 17 } 18 19 if (strstr(s1, s2) != NULL) { 20 printf("[%s] は [%s] を含んでいます。\n", s1, s2); 21 } else { 22 printf("[%s] は [%s] を含んでいません。\n", s1, s2); 23 } 24 return 0; 25}

投稿2015/04/30 21:47

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/04/30 06:35

shintanichan

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

lang

1#include <stdio.h> 2 3int main(int argc, char *argv[]) 4{ 5 char *s = argv[1], *t = argv[2]; 6 int p = 0, i; 7 8 for (i = 0; s[i] != '\0'; i++) 9 { 10 if (s[i] == t[p]) { 11 p += 1; 12 } else if (s[i] == t[0]) { 13 p = 1; 14 } else { 15 p = 0; 16 } 17 if (t[p] == '\0') { 18 printf("含まれます\n"); 19 return 0; 20 } 21 } 22 23 printf("含まれません\n"); 24 return 0; 25}

投稿2015/04/27 19:35

編集2015/04/27 20:20
penguinshunya

総合スコア140

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

penguinshunya

2015/04/27 20:30

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

0

実行時に文字列を2つ読み取り

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

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

実行時に文字列を2つ読み取り

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

投稿2015/04/27 13:01

otn

総合スコア84491

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trumpet0213

2015/04/27 13:06

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

2015/04/27 13:45

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

0

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

投稿2015/04/27 12:58

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2015/04/27 13:13

*argv[]は引数(文字列)のポインタの配列です・・・ちと難しいか 上の例だと、 argv[0]→"test1" プログラム名 argv[1]→"abc" パラメータ1 argv[1]→"defg" パラメータ2 になります。 なので、argv[1]の中にargv[2]が含まれるかという問題です。 最初はmainの中で、printf("%s:%s\n",argv[1],argv[2]);とかやって確認してみてください。文字列の中に文字列が含まれるかどうかは、ライブラリがありますからそれを使えば判定出来ます。・・・ argcはパラメタの数(正確にはargv[]に有効なポインタがいくつ入っているか)です。 なのでパラメタが2個あるときはargcは3になります。
trumpet0213

2015/04/27 13:32

んん、よくわからないです。できれば書いて欲しいです。。。
cateye

2015/04/27 13: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 なかった ・・・確認して理解しないとダメですよ
trumpet0213

2015/04/27 22:43

ありがとうございます!
cateye

2015/04/27 22:51

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問