私は物理学の博士課程の学生で、Java でコーディングした経験がありますが、C++ を学ぼうとしています。
私が解決しようとしている問題は、.txt ファイルからデータを読み込み、1000 を超えるすべての数値を 1 つのファイルに出力し、1000 未満のすべての数値を別のファイルに出力することです。
私が助けを必要としているのは、実際にデータを読み込んで配列に保存するコードの一部を書くことです。データ自体はスペースで区切られているだけで、すべてが新しい行にあるわけではありません。これは、c ++に新しい単語をintとして認識させる方法がわからないため、少し混乱しています。オンラインのさまざまなソースから入手したいくつかのコードをカナバリゼーションしました-
#include <iostream>
#include <string>
#include <fstream>
#include <cstring>
#include<cmath>
using namespace std;
int hmlines(ifstream &a) {
int i=0;
string line;
while (getline(a,line)) {
cout << line << endl;
i++;
}
return i;
}
int hmwords(ifstream &a) {
int i=0;
char c;
a >> noskipws >> c;
while ((c=a.get()) && (c!=EOF)){
if (c==' ') {
i++;
}
}
return i;
}
int main()
{
int l=0;
int w=0;
string filename;
ifstream matos;
start:
cout << "Input filename- ";
cin >> filename;
matos.open(filename.c_str());
if (matos.fail()) {
goto start;
}
matos.seekg(0, ios::beg);
w = hmwords(matos);
cout << w;
/*c = hmchars(matos);*/
int RawData[w];
int n;
// Loop through the input file
while ( !matos.eof() )
{
matos>> n;
for(int i = 0; i <= w; i++)
{
RawData[n];
cout<< RawData[n];
}
}
//2nd Copied code ends here
int On = 0;
for(int j =0; j< w; j++) {
if(RawData[j] > 1000) {
On = On +1;
}
}
int OnArray [On];
int OffArray [w-On];
for(int j =0; j< w; j++) {
if(RawData[j]> 1000) {
OnArray[j] = RawData[j];
}
else {
OffArray[j] = RawData[j];
}
}
cout << "The # of lines are :" << l
<< ". The # of words are : " << w
<< "Number of T on elements is" << On;
matos.close();
}
しかし、それがより簡単であれば、コピーされたすべてのコードが何をしているのか正確に理解していないので、すべてをやり直すことにオープンです。要約すると、私が必要としているのは-
コンソールでファイルパスを要求する ファイルを開き、各番号 (スペースで区切られている) を 1D 配列の要素として格納する
必要な方法でファイルを読み取ることができれば、実際の操作を自分で管理できると思います。
どうもありがとう