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

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

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

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

Q&A

解決済

2回答

440閲覧

strstr関数のコードについて

romina

総合スコア6

C

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

0グッド

0クリップ

投稿2022/03/08 20:27

strstr()関数でどうしてもわからない部分があります。
下記コードのi + jが何を指しているのか、またその後に続くneedle[j]についても詳しく説明していただけないでしょうか?

if (haystack[i + j] != needle[j])
break;
どうぞよろしくお願いします。

html

1char *_strstr(char *haystack, char *needle) 2{ 3 int i = 0; 4 int j = 0; 5 for (i = 0; haystack[i] != '\0'; i++) 6 { 7 for (j = 0; needle[j] != '\0'; j++) 8 { 9 if (haystack[i + j] != needle[j]) 10 break; 11 } 12 if (needle[j] == '\0') 13 return (&haystack[i]); 14 } 15 return (0); 16}

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

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

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

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

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

guest

回答2

0

ベストアンサー

みっちりコメント入れてみた:

C

1// 文字列haystack(乾草の山)からneedle(針)を探す。 2// 文字列haystackの中に文字列needleが部分文字列として含まれていればその位置を返す 3 4char *_strstr(char *haystack, char *needle) { 5 int i = 0; 6 int j = 0; 7 for (i = 0; haystack[i] != '\0'; i++) { 8 9 // haystackのi文字目以降とneedleとが一致するか、すなわち 10 // haystack[i+0], haystack[i+1], haystack[i+2]... と 11 // needle[0], needle[1], needle[2] ... が一致するかを調べる 12 // iは"ずらし幅": haystackの先頭からiだけずらした位置にneedleがあるかを調べる 13 // jは上記の0, 1, 2 ... に相当する 14 for (j = 0; needle[j] != '\0'; j++) { 15 if (haystack[i + j] != needle[j]) // 比較の途中で一致しない箇所が見つかったら調査を終了して次のiへ。 16 break; 17 } 18 if (needle[j] == '\0') // 一致したのでそのアドレスを返す 19 return (&haystack[i]); 20 } 21 return (0); // 一致箇所が見つからなかった 22}

投稿2022/03/08 22:46

編集2022/03/08 23:08
episteme

総合スコア16614

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

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

romina

2022/03/08 23:00

まさに求めていた説明で質問してよかったです。本当に細かく回答いただきありがとうございました。ちゃんと理解できて嬉しいです。
guest

0

ますは、strstr関数というのがどういう引数をとってどういう動作をする関数なのか、を調べましょう。
それを理解しないとコードの意味はわかりません

投稿2022/03/08 22:44

y_waiwai

総合スコア87784

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

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

romina

2022/03/08 22:55

まだまだCを始めたばかりで勉強不足ですね。アドバイスありがとうございました
y_waiwai

2022/03/08 23:01

VisualStudioやEclipseなどのC言語のデバッグ環境では、変数のナカミを見ながら1行づつ実行するってことができます。 そういうのを使って、実際に動かしながらどういう動作をするのか、ってのを見ていくのも理解の助けになるかと思います
romina

2022/03/08 23:40

VisualStudioはあるのですが、gccのコンパイルがうまくいかずまだ使いこなせていません。EmacsとVagrandでなんとか勉強していますが、今度また挑戦してみます。ありがとうございます!!
episteme

2022/03/08 23:48

Visual Studio (Visual C++)でやればいいじゃない...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問