飛び飛びで表示するには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tend-11001
記事: 3
登録日時: 1ヶ月前

飛び飛びで表示するには

#1

投稿記事 by tend-11001 » 2日前

「キーボードから半角文字1文字をchar型変数moziに読み込みます。 その後半角文字のみで構成された文字列を読み込み、文字列の中にmoziが飛び飛びで3回連続出現する回数をカウントして表示するプログラムを作成しましょう。」
という問題なのですが飛び飛びで3回連続という部分なのですが、for文をつかうのでしょうか>?
表示結果が以下のようになるようです。

どの文字を探す? > x⏎
半角文字列 > xxxxxxxxx⏎
'x' が飛び飛びで出現する回数は 5 回です。⏎

コード:

include<stdio.h>
int main(void) {
	char mozi,count;
	
	printf("どの文字を探す?>");
	scanf("%c", &mozi);
	
	for (count = 0; count <= 3; count++) {
		printf("半角文字列>");
		scanf("%c",&count);
	}
}
ここまで考えましたがわからないのでご協力をお願いします。

Math

Re: 飛び飛びで表示するには

#2

投稿記事 by Math » 2日前

初心者の方のようなので メモリーの動的確保などせず
分かりやすく書けばこんな感じでしょうか。

これをfor分を使うなど改良すればいいでしょう。
(Windows10でMinGW gcc 8.2.0 使用)

main.c

コード:

#include <stdio.h>
int main(void) {
	char mozi='a'; // [,count;]
	
	int count=0; // [回数をカウントするので整数型がいいでしょうね]

	char a[256]={ 0 }; // [文字列を格納する配列を用意する。いまとりあえず最大256文字とする]

	printf("どの文字を探す?>");
	scanf("%c", &mozi); //キーボードから半角文字1文字をchar型変数moziに読み込みます


	printf("文字列を入力>");
	scanf("%s", &a);
	
//	for (count = 0; count <= 3; count++) {
//		printf("半角文字列>");
//	}

	for(int i=0; i < (255-3); i++){

		// 3回連続出現する回数をカウント
		if(a[i]==mozi && a[i+1]==mozi && a[i+2]==mozi)count++;

		// null文字  ターミネート
		if(a[1]=='\0' || a[i+1]=='\0' || a[i+2]=='\0')break; 

        }
	printf("\n\n3回連続出現する回数=%d \n", count);

	return 0;
}
gc8.bat

コード:

gcc main.c

dir a.exe

a.exe

pause
http://www2.koyoen.birdview.co.jp/~abcx ... 14-01-.PNG

http://www2.koyoen.birdview.co.jp/~abcx ... 14-02-.PNG

かずま

Re: 飛び飛びで表示するには

#3

投稿記事 by かずま » 2日前

Math さんが書きました:
2日前
初心者の方のようなので メモリーの動的確保などせず
分かりやすく書けばこんな感じでしょうか。
そんな感じではないと思います。
そのプログラムだと、半角1文字が 'x' のとき、文字列 "xxxxxxxxx"
の中に 7回と出て、質問の例と合いません。

飛び飛びの x ですから "x.x.x" (. は何でもよい) の回数でしょう。

コード:

	|xxxxxxxxx|
	|x.x.x    |
	| x.x.x   |
	|  x.x.x  |
	|   x.x.x |
	|    x.x.x|
5回です。

Math

Re: 飛び飛びで表示するには

#4

投稿記事 by Math » 2日前

あなるほどサンプルはそうなってますね。

返信

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