入力テキスト中の各単語を異なる行に分けて表示する問題です.
入力⇒NASA debuted a color(改行)
出力⇒NASA(改行)debuted(改行)a(改行)color(改行)
このように表示します.
・単純には、スペースが出たら改行文字を代わりに出力します
・スペース以外の区切り文字があった場合も、改行文字を代わりに出力します
・複数の区切り文字が連続した場合には、単一の改行を出力します
・区切り文字は、isspace(ch)関数で判定して真となる文字とします
・isspace(ch)関数は、chが「空白文字」(即ちスペース、タブ、改行、復帰、垂直タブ、または改頁文字)のコードであれば、真(非ゼロ)を 返します
以下が現在のコードです.正しく出力されないのですが,どこを直したらいいのか教えてください.よろしくお願いします.
コード:
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
// 定数定義
#define B 0 // 空白文字
#define N 1 // 通常文字
void main() {
// 変数
ifstream file; // 入力ファイル
char ch; // 入力文字
int type; // 直前入力文字の種別
// 1. 「直前入力文字の種別」を「空白文字」とする。
type = B;
// 2. ファイルを開く。
file.open("test.txt");
// 3. ファイルから1文字読み込む。
ch = file.get();
// 4. ファイルの未尾に到達するまで以下の処理を繰り返す。
while (!file.eof()) {
// 4-1. 入力文字が空白文字ならば、以下の処理を実行する。
if (isspace(ch)) {
// 4-1-1. 「直前入力文字の種別」が「通常文字」ならば、改行する。
if (type = N) {
ch = '\n';
}
// 4-1-2. 「直前入力文字の種別」を「空白文字」とする。
type = B;
}
// 4-2. そうでない場合、以下の処理を実行する。
else {
// 4-2-1. 入力文字を出力する。
cout << ch;
// 4-2-2. 「直前入力文字の種別」を「通常文字」とする。
type = N;
}
// 4-3. ファイルから1文字読み込む。
ch = file.get();
// 5. 入力ファイルを閉じる。
file.close();
}
}