dポイントプレゼントキャンペーン実施中!

下記の内容が入力されているtxtファイル内のPredictionの下から1000行の内に1~17の整数があるとして、その整数ごとの個数が確認できるようなヒストグラムのプログラムを、Microsoft visual studioで作成したいです。
Predictionの列が以下の表示ではずれてます。実際はPredictionの下に1~17の整数が、Teacherの下には1のみが並んでます。Teacher列はヒストグラム上では無視してください。
説明不足かも知れませんがわかる方よろしくお願い致します!
----------------------------------------------------------------------
Accuracy=0.2025
Class Labels
Prediction Teacher
5 1
12 1
9 1
6 1
12 1
・ ・
・ ・
・ ・

「急!【数列のヒストグラム作成】(C++、」の質問画像

質問者からの補足コメント

  • うれしい

    ご回答大変にありがとうございます。非常にイメージに近い形で出力されました。
    お手数ですが、出力結果を新しいtxtファイルに書き込んで保存するような処理も加えていただくことは可能でしょうか。よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/12/22 14:55

A 回答 (1件)

画像を見たところ、データファイルの数値はタブ区切りでしょうか?


タブ区切りだと勝手に想定して、データファイルの名前を data.txt だとします。
だいぶやっつけですが以下のような感じでどうでしょう。
データファイルの上から3行の英語が書かれている行は、atoi関数で0が返りますが、
今回、整数は1~17の範囲ということなので、0は無視しています。
必要なら適当にエラー処理などは入れてください。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STR 100
#define MAX_NUM 17+1


int main(void) {
FILE *fp;
char str[MAX_STR];
char *tp;
int a;
int freqdis[MAX_NUM] = {0};
int i;


fp = fopen("data.txt", "r");

while (fgets(str, MAX_STR, fp) != NULL) {
tp = strtok(str, "\t");
a = atoi(tp);

if (a == 0) {
continue;
}

freqdis[a]++;
}

/* 表示 */
for (i = 1 ; i < MAX_NUM ; i++) {
printf("%d: %d個\n", i, freqdis[i]);
}

fclose(fp);
return 0;
}
この回答への補足あり
    • good
    • 0
この回答へのお礼

自己解決しました。ありがとうございました。

お礼日時:2015/12/22 15:26

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