プロが教える店舗&オフィスのセキュリティ対策術

テキストファイルの読み込みについて質問です。
あらかじめ用意されたテキストファイルを1行読み込み、 読み込んだ文字列内で特定の文字を検索する以下の プログラムを作成せよ。
(1)Emacs(Visual Studio)を用いて「風が吹けば桶屋が儲かる。」をローマ字で入力し、okeya.txt というファイル名で保存せよ。
(2)つぎに、この okeya.txt を読み込み、文字列内で文字の 'a'が 何番目にあるかをすべて列挙表示するプログラムokeya.cを 作成せよ。なお、文字列の先頭文字(K)の位置を第1番目とする。
文字列中の特定文字の検索にはポインタを用いること。

この実行結果が
Kazega hukeba okeyaga moukaru
Kazega hukeba okeyaga moukaru上の文字列にaは
2番目にあります。
6番目にあります。
13番目にあります。
19番目にあります。
21番目にあります。
27番目にあります。
になったのですが、ポインタを用いて特定文字の探索は以下のコードで正しいですか?

#pragma warning(disable: 4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N (256)
int main(void) {
FILE* fp;
char filename[] = "okeya.txt";
char str[N];

fp = fopen(filename, "r");
if (fp == NULL) {
printf("%s file not open!\n", filename);
exit(1);
}

while (fgets(str, N, fp) != NULL) {
printf("%s", str);
}

char* cp = str;
char target = 'a';
int position;
printf("\n%s", str);
printf("上の文字列に%cは\n", target);
while ((cp = strchr(cp, target)) != NULL){
position = (int)(cp - str) + 1;
printf("%d番目にあります。\n", position);
cp++;
}

fclose(fp);

return (0);
}

A 回答 (1件)

> 以下のコードで正しいですか?



いやね。
原則的に、正しく動いてりゃ正しいコードなんですよ(笑)。
だから人にわざわざ訊かんでもエエわけ。

もっといやらしくしたいんなら、positionの定義消しちゃって

printf("%d番目にあります。\n", (int)(cp - str) + 1);

にしちゃってもいいかも。
そうすれば宿題出した先生に

「アテはポインタ分かってまっせ〜。ほら〜。」

ってアピール出来るかも。
出来ないかも、だけど(笑)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!