C++ 初心者です。
以下のような半角スペースと+ 又は - の符号付きの数値データファイル"data"を読み込んで2次元配列に収納するプログラムを教えて頂きたいです。
(アンダーバー"_"で、半角スペースを表します)
___-10.2__20.1_
_30.3___________-50.3___
______3.1____-9.2__
なお、C++の参考書に、「通常の配列はあらかじめサイズを決めて作成しなければならないが、vectorにはメモリが許す範囲でいくつでも要素を追加できる」と書いてあり、この点を活かしたプログラムを作成したいので、最初にデータ数を決めないで、データファイルの最後にくるまで読み込めるようなプログラムにしたいです。
プログラム中で、
for 又は while () {
___________for 又は while() {
______________________cout << "n[" << i << "][" << j << "]= " << n[i][j] << endl;
___________}
}
のように記述して以下のように出力されるようにしたいです。
n[0][0]= -10.2
n[0][1]= 20.1
n[1][0]= 30.3
n[1][1]= -50.3
n[2][0]= 3.1
n[2][1]= -9.2
すみませんが、わかる方がいらっしゃいましたら、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
やはり、安直に置き換えるとダメですね。
「配列風」のほうは、こんな感じに修正(出力結果は同じ)
pair を使ったソースも、inner は、while() のループの中で定義した方がいい気がする。
#include <vector>
#include <fstream>
#include <iostream>
int main()
{
std::vector<std::vector<double> > n;
std::ifstream inf("test.txt");
while(1)
{
std::vector<double> inner;
double a;
double b;
inf >> a >> b;
if (inf.eof()) break;
inner.push_back(a);
inner.push_back(b);
n.push_back(inner);
}
for (int i = 0; i < n.size(); i++)
std::cout << "[" << i << "] = " << n[i][0] << ", " << n[i][1] << "\n";
}
No.2
- 回答日時:
例題を見ると、2次元配列というより(2次元配列であるのはその通りですが)
x, y のペアの集まりのような気がします。
この場合、pair の vector というのもありかと思います。
出力結果は、お望みのものとは異なりますが。
----------------------------------------------------------------
#include <vector>
#include <fstream>
#include <iostream>
int main()
{
std::vector<std::pair<double, double> > n;
std::pair<double, double> inner;
std::ifstream inf("test.txt");
while(1)
{
inf >> inner.first >> inner.second;
if (inf.eof()) break;
n.push_back(inner);
}
for (int i = 0; i < n.size(); i++)
std::cout << "[" << i << "] = " << n[i].first << ", " << n[i].second << "\n";
}
----------------------------------------------------------------
配列風にするなら、
#include <vector>
#include <fstream>
#include <iostream>
int main()
{
std::vector<std::vector<double> > n;
std::vector<double> inner;
std::ifstream inf("test.txt");
while(1)
{
inner.clear();
double d;
inf >> d;
inner.push_back(d);
inf >> d;
inner.push_back(d);
if (inf.eof()) break;
n.push_back(inner);
}
for (int i = 0; i < n.size(); i++)
std::cout << "[" << i << "] = " << n[i][0] << ", " << n[i][1] << "\n";
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラーが出ているのですが...
-
#defineの使い方について
-
openCVで動画が読み込めないエ...
-
なぜ、C++の標準ヘッダをインク...
-
指定した文字を削除したい
-
#include "fstream.h"
-
#define中の#のエスケープ
-
Linux Ubuntu19.10でQt5.14.1の...
-
STLでポインタのリストをsort()...
-
JPEGやPNGが読めるLoadImage関数
-
テイラー展開とその精度について
-
構造体配列のvectorへの変換と...
-
ファイル読み込みとmap処理
-
【C++】ヘッダ内でstringを格納...
-
コーディング
-
C言語からgnuplot呼び出し
-
構造体に決められた文字列を入...
-
mapの初期化
-
snprintfが使用できない。
-
Cでのパケットキャプチャについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報