
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ごめんなさい、No.1へのお礼とNo.3へのお礼が矛盾しているので確認ですが、No.3へのお礼に書いてあることが正しくて、次の質問文が正しいということでいいですか?
「任意の対象文字列の中から、任意の検索文字列が何回現れるかカウントしたい」
ならば、strstr()を使います。
strstr()は、指定した文字列の先頭から、検索文字列が最初に現れるその先頭文字のポインタを返してくれる関数です。見つからなかったらNULLを返します。
なので、対象文字列の先頭から検索文字列で検索を始め、ヒットしたらポインタを進めて再検索する、ということを戻り値がNULLになるまで繰り返します。ここで、No.4の方がおっしゃる「文字列 "AAAAAAAAAA" の中から文字列 "AAAAA" を探す」の問題がありますが、重複を許すならばポインタを進めるのは1、重複を許さないならばstrlen("AAAAA")です。
ちなみに、ポインタのことは理解していますよね?
No1の理解力の乏しい回答者と同一人物が自己弁護しに来たのかな?
社会人ですか?
大人って楽でいいですね?
悪いけど自分で調べたほうが早かったのでどうでもいいです。

No.3
- 回答日時:
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'になっているとを保証させてから、動作するようにさせる必要があります。
すいませんねぇ、文字と文字列の違いもわからない人はすっこんでていいですよ?
abcabcabcのなかのaが何個なんてのはプログラミング初めて1週間の僕にだってわかります。
aが何個かじゃなくabやbcが何個かって聞いてるの
よくそんな知識力と理解力で解答なんてしようなんて思いつきましたねぇ^^;

No.1
- 回答日時:
補足要求です。
質問1:
文字列の中の1文字を検索するのですか?
それとも、文字列の中の文字列(=複数文字)を検索するのですか?
質問2:
>文字列の中の文字を検索してカウントしたり検索する文字列が毎回固定ならばできるのですが
>その都度変わる文字列の中の文字列をカウントする方法が解りません
毎回固定の場合のソースを提示してください。
質問1
>文字列の中の文字
文字列ではなく文字(1文字)
>カウントしたり検索
つまり複数ということが質問内容の文章から読み取れるはずです
質問2
3文字固定なら
初心者なので効率的にどうなのかは解りませんが検索対象の文字列str1[i], str1[i+1], str[i+2と検索する文字列]str2[0], str2[1], str2[2]でで検索を掛ければできますね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- googleスプレッドシートでカッコ内の文字数をカウントしたい
- C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空
- Excelの列から検索して該当する行を別シートに転記するVBA
- Excelでの検索結果を含む行だけを表示させたい
- エクセルでA列セル内で折り返すことなく、文字列を、B列C列・・・側に一行に
- C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単
- Google検索の英語キーボード 英語のキーボードの配列が元に戻らなくなりました まえの配列は左上に
- VBA初心者です 検索した数字の行に色をつける
- PHPプログラムをエクセルに張り付けると検索ボックスがでてくる!
- 指定文字以外のカウント
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
文字列中に含まれる文字の個数をカウントするプログラムについて…
C言語・C++・C#
-
任意の文字列のアルファベットのカウント
C言語・C++・C#
-
アルファベットの出て来た回数
C言語・C++・C#
-
-
4
アルファベットをカウント、
C言語・C++・C#
-
5
ファイルに含まれるアルファベットの小文字のみを数えるプログラム
C言語・C++・C#
-
6
配列を用いない最大値の求め方
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
整数データの配列から同じ値のデータを削除する関数
C言語・C++・C#
-
9
C言語のポインターに関する警告
C言語・C++・C#
-
10
c言語で文書を読み込み、単語の出現頻度を教える
その他(教育・科学・学問)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
Excelで3E8を3.00E+8にしない方...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
sedなどで、特定の文字列の後の...
-
エクセルで文字列をtxtファイル...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
VBの「As String * 128」とは?
-
MS SQLServer のSQLで文字列の...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
aaa.bbb.ccc という、「ドット...
-
VBAを使って選択した範囲の数字...
-
Left関数とRight関数を合わせた...
-
NULLの定義について
-
vbsからバッチファイル実行時の...
-
16進数を10進数に簡単に変換す...
-
エクセル 数値データを桁をそ...
-
Msgboxの×が押されたとき
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
sedなどで、特定の文字列の後の...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列をtxtファイル...
-
MS SQLServer のSQLで文字列の...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
VBの「As String * 128」とは?
-
アクセスで特定の数字以外(複...
-
Windowsでファイルのリネームで...
-
textboxユーザーコントロールの...
-
CStringの文字列検索&抜き出し...
おすすめ情報