「キーボードから半角文字1文字をchar型変数moziに読み込みます。 その後半角文字のみで構成された文字列を読み込み、文字列の中にmoziが飛び飛びで3回連続出現する回数をカウントして表示するプログラムを作成しましょう。」
という問題なのですが飛び飛びで3回連続という部分なのですが、for文をつかうのでしょうか>?
表示結果が以下のようになるようです。
どの文字を探す? > x⏎
半角文字列 > xxxxxxxxx⏎
'x' が飛び飛びで出現する回数は 5 回です。⏎
ここまで考えましたがわからないのでご協力をお願いします。
飛び飛びで表示するには
Re: 飛び飛びで表示するには
初心者の方のようなので メモリーの動的確保などせず
分かりやすく書けばこんな感じでしょうか。
これをfor分を使うなど改良すればいいでしょう。
(Windows10でMinGW gcc 8.2.0 使用)
main.c
gc8.bat
http://www2.koyoen.birdview.co.jp/~abcx ... 14-01-.PNG
http://www2.koyoen.birdview.co.jp/~abcx ... 14-02-.PNG
分かりやすく書けばこんな感じでしょうか。
これを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;
}
http://www2.koyoen.birdview.co.jp/~abcx ... 14-02-.PNG
Re: 飛び飛びで表示するには
そんな感じではないと思います。
そのプログラムだと、半角1文字が 'x' のとき、文字列 "xxxxxxxxx"
の中に 7回と出て、質問の例と合いません。
飛び飛びの x ですから "x.x.x" (. は何でもよい) の回数でしょう。 5回です。
Re: 飛び飛びで表示するには
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: 飛び飛びで表示するには
[訂正版]
これでサンプルは5になるね。
http://www2.koyoen.birdview.co.jp/~abcx ... 21-01-.PNG
#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;
}
http://www2.koyoen.birdview.co.jp/~abcx ... 21-01-.PNG