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

c++なんですけど、、、、
テキストファイルから数字と英字が組み合わさった文字列を読み込んで、違うテキストファイルに同じ文字列を出力したいんですがやり方がわかりません。(例:0123a4567のような文字列)どなたか教えてもらえませんか。質問大雑把ですいません、、、。お願いします。fscanf でしようとしてます。

A 回答 (3件)

たぶんfscanfで書くならこんな感じですね。


カレントにあるinput.txtを読み込んでoutput.txtに書き出します。
ただし、4文字数値、1文字アルファベット、4文字数値の書式以外は
正しく動作しないので、あまり良いプログラムではないと思います。

#include <stdio.h>

int main(int argc, const char *argv[])
{
  FILE *infp = fopen("input.txt", "r");
  FILE *outfp = fopen("output.txt", "w");
  int num1, num2;
  char alpha;

  if(infp == NULL || outfp == NULL)
    return -1;

  while(fscanf(infp, "%04d%c%04d", &num1, &alpha, &num2) != EOF){
    fprintf(outfp, "%04d%c%04d\n", num1, alpha, num2);
  }

  fclose(infp);
  fclose(outfp);
  return 0;
}


でもテキストファイルをそのままコピーするなら、どんな書式でもいいように
fgetsとか使ったほうがいいと思います。
その場合はこんな感じ。


#include <stdio.h>

int main(int argc, const char *argv[])
{
  FILE *infp = fopen("input.txt", "r");
  FILE *outfp = fopen("output.txt", "w");

  if(infp == NULL || outfp == NULL)
    return -1;

  char line[256];
  while(fgets(line, 256, infp)){
    fputs(line, outfp);
  }

  fclose(infp);
  fclose(outfp);
  return 0;
}

ちなみに、どちらも全角スペースを半角に変換しないとエラーになります。
あと、C++を指定されてますけど、なにかしらのクラス設計をされようとしていますか?
どんなクラスを作りたいのか書いていただければ、C++でどうするべきか
もうすこしアドバイスできるかもしれません。

# 上記のif文には、fclose漏れが起きる不具合がありますが、
# エラーチェックは説明の本質ではないため放置してあります。
    • good
    • 0

1)ファイルを読み込みように開く。

エラー処理があるのが好ましい
2)別のファイルを書き込みように開く。エラー処理があるのが好ましい
3)読み込みファイルから1文字読み込む
4)書き込みファイルに3)の文字を書き込む
5) 3),4) を読み込みファイルが終わるまで繰り返す
6) 1,2のファイルを閉じる

基本はこう。
で、
> 例:0123a4567のような文字列)
とかいう部分が、何をしたいのかがよくわかりません。

文字列にするには、3,4の「文字」の代りに「文字列」にする。
特定の条件の文字列を探すのなら、4を 「条件にあったものだったら~」にする。

> fscanf でしようとしてます。
なぜでしょう?fscanfだと好都合なことがあるのですか?
    • good
    • 0

初心者のままでは解決は困難だと思いますので、まともな入門書を一冊読み、十分に練習を重ねることで、まずは初心者から抜け出してください。


初心者から抜け出したころには、やり方が分かるはずです。
    • good
    • 0

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