重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

テキストファイルの読み込みについて質問です。
あらかじめ用意されたテキストファイルを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で質問しましょう!