飛び飛びで表示するには

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 飛び飛びで表示するには

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

#6

by Math » 5年前

[訂正版]

コード:

#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-5); i++){

		// 3回連続出現する回数をカウント 飛び飛びチェック
		if(a[i]==mozi && a[i+2]==mozi && a[i+4]==mozi)count++;

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

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

	return 0;
}

 
これでサンプルは5になるね。
http://www2.koyoen.birdview.co.jp/~abcx ... 21-01-.PNG

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

#5

by かずま » 5年前

tend-11001さん、これは参考になりますか?

コード:

#include <stdio.h>   // scanf, printf
#include <string.h>  // strlen

int main(void)
{
	char 文字, 文字列[256];
	int i, 最後, 回数 = 0;

	printf("どの文字を探す? > ");
	scanf(" %c", &文字);
	printf("半角文字列 > ");
	scanf("%s", 文字列);
	最後 = strlen(文字列) - 5;  // strlen("x.x.x") == 5
	for (i = 0; i <= 最後; i++)
		if (文字列[i]==文字 && 文字列[i+2]==文字 && 文字列[i+4]==文字)
			回数++;
	printf("'%c' が飛び飛びで出現する回数は %d 回です。\n", 文字, 回数);
	return 0;
}
コンパイラは何を使っていますか?
コンパイルできますか?
できない場合、自分で修正できますか?

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

#4

by Math » 5年前

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

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

#3

by かずま » 5年前

Math さんが書きました:
5年前
初心者の方のようなので メモリーの動的確保などせず
分かりやすく書けばこんな感じでしょうか。
そんな感じではないと思います。
そのプログラムだと、半角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回です。

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

#2

by Math » 5年前

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

これを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

飛び飛びで表示するには

#1

by tend-11001 » 5年前

「キーボードから半角文字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);
	}
}
ここまで考えましたがわからないのでご協力をお願いします。

ページトップ