指定した文字のカウント

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
REN

指定した文字のカウント

#1

投稿記事 by REN » 9年前

文字列を入力してそのあとに文字を1つ指定しその文字列の中に入力した文字がいくつ含まれているのかを数えるプログラム
なのですが、最初のstrを入力した時点でいきなりaの部分に強制的にstrの文字が入力されてしまいカウントされません。

例えば、strにabcと入力すると強制的にaにもabcが入力され
結果が
abcの中にabcが0個あります
になってしまいます。
よろしくお願いします。

コード:

#include<stdio.h>

int search(char str[], char a);

int main(void)
{
	char str[100];
	char a;
	int ans;

	printf("文字列を入力\n");
	scanf("%s", str);

	printf("指定する文字を入力\n");
	scanf("%c", &a);

	ans = search(str, a);

	printf("%sの中に%cは%d個あります\n", str, a, ans);

	return 0;
}

int search(char str[], char a)
{
	int i, c;

	c = 0;

	for (i = 0; str[i] != '\0'; i++){
		if (str[i] ==a){
		c++;
}
	}
	return c;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 指定した文字のカウント

#2

投稿記事 by みけCAT » 9年前

REN さんが書きました:例えば、strにabcと入力すると強制的にaにもabcが入力され
結果が
abcの中にabcが0個あります
になってしまいます。
このコードがC言語またはC++と仮定すると、aはchar型なので一文字しか入りません。
したがって、aにabcが入力され、「abcの中にabcが0個あります」と出力されることはありえません。
また、あってはいけない場所に全角の&があるので、そもそもコンパイルが通りません。

使用している言語を教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 指定した文字のカウント

#3

投稿記事 by かずま » 9年前

REN さんが書きました:文字列を入力してそのあとに文字を1つ指定しその文字列の中に入力した文字がいくつ含まれているのかを数えるプログラム
なのですが、最初のstrを入力した時点でいきなりaの部分に強制的にstrの文字が入力されてしまいカウントされません。
最初の scanf であなたは "abc\n" を入力しました。Enter キーを押しましたよね。
その scanf は "abc" を読み込みます。標準入力には "\n" が残っています。
次の scanf はその "\n" を読み込みます。"abc" の中に '\n' は 0個です。

修正方法は %c の前にスペースを入れること。

コード:

	scanf(" %c", &a);
宿題です。そのスペースの意味を調べて、ここに書いてください。

閉鎖

“C言語何でも質問掲示板” へ戻る