アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語の文字列の検索について教えてください
文字列の中の文字を検索してカウントしたり検索する文字列が毎回固定ならばできるのですが
その都度変わる文字列の中の文字列をカウントする方法が解りません

よろしくお願いします。

A 回答 (5件)

ごめんなさい、No.1へのお礼とNo.3へのお礼が矛盾しているので確認ですが、No.3へのお礼に書いてあることが正しくて、次の質問文が正しいということでいいですか?



「任意の対象文字列の中から、任意の検索文字列が何回現れるかカウントしたい」

ならば、strstr()を使います。
strstr()は、指定した文字列の先頭から、検索文字列が最初に現れるその先頭文字のポインタを返してくれる関数です。見つからなかったらNULLを返します。
なので、対象文字列の先頭から検索文字列で検索を始め、ヒットしたらポインタを進めて再検索する、ということを戻り値がNULLになるまで繰り返します。ここで、No.4の方がおっしゃる「文字列 "AAAAAAAAAA" の中から文字列 "AAAAA" を探す」の問題がありますが、重複を許すならばポインタを進めるのは1、重複を許さないならばstrlen("AAAAA")です。

ちなみに、ポインタのことは理解していますよね?
    • good
    • 1
この回答へのお礼

No1の理解力の乏しい回答者と同一人物が自己弁護しに来たのかな?
社会人ですか?
大人って楽でいいですね?
悪いけど自分で調べたほうが早かったのでどうでもいいです。

お礼日時:2018/02/23 18:39

「文字列の中から文字列を探す」場合だと, 例えば


文字列 "AAAAAAAAAA" の中から文字列 "AAAAA" を探す
ような状況を想定する必要があります. この場合いくつとしますか?

ああ, あと, 標準ライブラリ関数はどこまで使っていい?
    • good
    • 0
この回答へのお礼

ああ、君には無理だからすっこんでていいよ

お礼日時:2018/02/22 18:02

No1です。


補足要求の返信ありがとうございました。
要件としては、
「文字列(文字数がいくつかは不明)の中に、特定の1文字がいくつかあるかをカウントしたい。」
ということであってますか。以下、その前提での回答です。

C言語で文字列という場合は、必ず文字列の最後に終端を表す文字が格納されています。
これは、ASCIIコードの値が0の文字です。
C言語では '\0' 又は 0x00 でこの文字を表します。

従って、'\0'が出現するまで、検索し、'\0'を検知した時点で検索を終了すれば良いです。

以下は、文字列"ABCAXYA"中にAが何個あるかのカウント例です。
--------------------------------------------
#include <stdio.h>

int main(void){
char str[16] = "ABCAXYA";
int i;
int ctr;
i = 0;
ctr = 0;
while(1){
if (str[i] == '\0') break;
if (str[i] == 'A') ctr++;
i++;
}
printf("Aの数は%d個です\n",ctr);
return 0;
}
----------------------------------------------------
実行結果
Aの数は3個です

蛇足ですが、
「では、終端が'\0'になってない場合はどうなるのか」という疑問がでるかも知れませんが、
その場合、プログラムは'\0'を検知するまで延々と動作します。(つまり暴走します)
従って、暴走しないように、必ず、終端が'\0'になっているとを保証させてから、動作するようにさせる必要があります。
    • good
    • 0
この回答へのお礼

すいませんねぇ、文字と文字列の違いもわからない人はすっこんでていいですよ?
abcabcabcのなかのaが何個なんてのはプログラミング初めて1週間の僕にだってわかります。
aが何個かじゃなくabやbcが何個かって聞いてるの

よくそんな知識力と理解力で解答なんてしようなんて思いつきましたねぇ^^;

お礼日時:2018/02/22 18:08

#1 に加えて質問.



検索する文字列が「重複」する場合はどのように数える?
    • good
    • 0
この回答へのお礼

>カウントしたり検索
つまり複数ということが質問内容の文章から読み取れるはずです

お礼日時:2018/02/20 06:18

補足要求です。


質問1:
文字列の中の1文字を検索するのですか?
それとも、文字列の中の文字列(=複数文字)を検索するのですか?

質問2:
>文字列の中の文字を検索してカウントしたり検索する文字列が毎回固定ならばできるのですが
>その都度変わる文字列の中の文字列をカウントする方法が解りません
毎回固定の場合のソースを提示してください。
    • good
    • 0
この回答へのお礼

質問1
>文字列の中の文字
文字列ではなく文字(1文字)
>カウントしたり検索
つまり複数ということが質問内容の文章から読み取れるはずです

質問2
3文字固定なら
初心者なので効率的にどうなのかは解りませんが検索対象の文字列str1[i], str1[i+1], str[i+2と検索する文字列]str2[0], str2[1], str2[2]でで検索を掛ければできますね

お礼日時:2018/02/20 06:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています