下記の内容が入力されているtxtファイルを読み込んで、一番下の内容のような感じに横一列に変換して別のtxtファイルで出力するプログラムを、C、C++で作成したいです。
Numberの下の数字を正規化して、1行目から17行目合わせて1.0になるように変換したいです。
***が並んでいるのは読み込み時無視してください。
_____は半角スペース5つ分で、_は1つ分という意味です。
説明不足かも知れませんがわかる方よろしくお願い致します!
----------------------------------------------------------------------
Label:Number|Histograms
_____1:_____0|
_____2:_____77|*******
_____3:_____101|**********
_____4:_____5|
_____5:_____28|**
_____6:_____0|
_____7:_____45|****
_____8:_____64|******
_____9:_____0|
_____10:_____1|
_____11:_____4|
_____12:_____505|****************
_____13:_____22|**
_____14:_____1|
_____15:_____49|****
_____16:_____2|
_____17:_____96|*********
----------------------------------------------------------------------
1:0.10160_2:0.00006665_3:0.0025560_4:0.00666_~~_15:0.0044458_16:0.00555_17:0.00099
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#include <iostream>
#include <vector>
using namespace std;
struct HISTOGRAMS {
int number;
double histograms;
};
vector<HISTOGRAMS>* read_hist() {
FILE *fp;
auto *hist = new vector<HISTOGRAMS>();
int number;
double histograms;
char buf[100];
fopen_s(&fp, "hoge.txt", "r");
fscanf_s(fp, "%s", buf, 100);
while (fscanf_s(fp, "%d%*c%lf%*s", &number, &histograms) != EOF) {
HISTOGRAMS temp;
temp.number = number;
temp.histograms = histograms;
hist->push_back(temp);
}
fclose(fp);
return hist;
}
void write_hist(vector<HISTOGRAMS>* hist) {
FILE *fp;
fopen_s(&fp, "huga.txt", "w");
for (auto it = hist->begin(); it != hist->end(); it++) {
fprintf_s(fp, "%d:%f ", (*it).number, (*it).histograms);
}
fclose(fp);
}
int sum_hist(vector<HISTOGRAMS>* hist) {
int sum = 0;
for (auto it = hist->begin(); it != hist->end(); it++) {
sum += (int)(*it).histograms;
}
return sum;
}
void normalize_hist(vector<HISTOGRAMS>* hist) {
int sum = sum_hist(hist);
for (auto it = hist->begin(); it != hist->end(); it++) {
if (sum != 0) {
(*it).histograms /= sum;
}
}
}
int main() {
vector<HISTOGRAMS>* hist = read_hist();
normalize_hist(hist);
write_hist(hist);
delete hist;
return 0;
}
No.1
- 回答日時:
・読み込んで、数値のところを抜き出して、配列に入れる
・全部の合計値を求める
・各値について、 元の値 / 合計値 を出力
となりますけど、わからないのはどこですか?
Cでやるなら
・読み込んで、数値のところを抜き出して、全部の合計値を求める
・ファイルの読み出し位置を先頭に戻す
・再度読み込んで、数値のところを抜き出して、各値について、 元の値 / 合計値 を出力(整数/整数にならないように注意)
がいいかも。
C/C++でやらなければならない積極的な理由がなければ、
Perl,Ruby,Python,PHP等のテキスト処理が得意な言語を使うとか、
Excelで区切り位置で分割して... とかを使うとかの方が楽です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
commons-netでのFTP送信について
-
VisualStudioでのファイルの入...
-
日本語ファイル名のFTPについて
-
C言語 共用体の構造体の引数設定
-
構造体のメンバにファイルポイ...
-
Winsockの通信処理にてファイル...
-
ファイルからCR/LFを除去したい
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
fread()エラー
-
マイナスからプラスへ転じた時...
-
Notepad++の関数リスト表示の変...
-
DWORDの実際の型は何でしょうか
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
2÷3などの余りについて
-
構文エラー";"が型の前にあり...
-
信頼区間の1.96や1.65ってどこ...
-
ネットワークにつながっている...
-
プログラムでの数字につく”f”の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
C言語でファイル読み書きを早く...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語 連番データの読み込み
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
C言語の課題です
-
fread()エラー
-
VisualStudioでのファイルの入...
-
大量の入力ファイルを扱うとき...
-
C言語でセグメンテーションエ...
-
C言語におけるファイル読み込み...
-
C言語でクロマキー合成をする方法
-
c言語 ファイルから数字を読み...
-
C言語を用いて、csvファイル内...
-
ファイル読み込み EOF 判定
おすすめ情報
最大値1、最小値0になるように正規化したいです。
ご回答ありがとうございます!当方非常に初心者なもので、仕様がわかってもプログラムにあらわすことができません。もしよければコピーしてすぐ使えるようなソースコード(C/C++)をご提示いただいてもよろしいでしょうか。お手数かけますがどうぞよろしくお願いいたします。