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

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

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

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

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Q&A

解決済

3回答

4066閲覧

文字列の中に文字列が何回出てくるか

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

0グッド

0クリップ

投稿2020/08/31 02:46

C言語、文字列についての問題です。

1行目に文字列s、2行目に文字列tが与えられ、文字列tの中に文字列sが何回含まれるかカウントする問題です。例えば文字列sがab、tがabcdeabcabなら3と出力したいです。(AAAの中にAAが何個あるかという場合は2個とカウントします。)

「文字列の中にある一文字が何個含まれるか」であればループで解けるので今回もループを考えてみましたが「文字列と文字列」となるとあまりに複雑でできませんでした。また、今回調べて見てそれらしい関数に思えたのでstrstrを初めて使おうと試みましたが、(私がやり方を知らないだけだかもしれませんが…)出現回数の「カウント」はできませんでした。

全然分からなくなってしまい、コードも示せず恐縮ですが、ご教示頂けますでしょうか。
方向性でも具体的なコードでも大変助かります!

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

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

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

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

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

Zuishin

2020/08/31 02:52

ループ中で strncmp を使えばできるんじゃないでしょうか。
dodox86

2020/08/31 03:21

回答しようかと思いましたが、過去の質問(回答はいただいている)が放置されているようので、まずそれらを終らせた方が(=こなせるようになった方が)良いと思います。本質問に回答しても、同様に放置される気がしてきます。尚、strstrでも解決できます。
退会済みユーザー

退会済みユーザー

2020/08/31 09:13

ごめんなさい。日本語を勉強中で文章も含めて投稿すると時間がかかってしまい対応することが間に合っていませんでした。なるべく早く対応できるように頑張ります。
guest

回答3

0

ベストアンサー

strstrを初めて使おうと試みましたが、(私がやり方を知らないだけだかもしれませんが…)出現回数の「カウント」はできませんでした。

strstr を使ってみました。

C

1#include <stdio.h> // printf 2#include <string.h> // strstr 3 4int count(const char *s, const char *t) 5{ 6 int k = 0; 7 for (; t = strstr(t, s); t++) k++; 8 return k; 9} 10 11int main(void) 12{ 13 printf("%d\n", count("ab", "abcdeabcab")); 14 printf("%d\n", count("AA", "AAA")); 15}

strstr で見つかったらカウントアップ。次の位置からまた検索です。

投稿2020/08/31 03:34

kazuma-s

総合スコア8224

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

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

退会済みユーザー

退会済みユーザー

2020/09/21 15:14

ありがとうございました!
guest

0

strstrは、検索対象文字列のポインタと、検索する文字列のポインタを渡して、
見つけた場合は、見つけた場所のポインタを返す関数ですから、
検索開始する位置を考えながら指定すれば、繰り返して続きの検索も可能です。
見つからなくなるまで繰り返せば、その回数を数えることで、カウント可能です。

投稿2020/08/31 03:32

amiya

総合スコア1218

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

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

0

考え方は文字の場合と同じです。
tをループで先頭から順次比較していきますが、比較をどうするかだけだと思います。
標準関数のstrncmpを使えば文字数で比較できるので良いでしょう。

c

1strncmp(&t[i], s, strlen(s))

こんな感じの比較処理になるかと思います。
ループ処理とカウント処理はがんばってください。

投稿2020/08/31 02:53

ttyp03

総合スコア17000

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問