0

C ++とプログラミングは初めてで、これを理解するのに苦労しています。

疑似観念; 区切り文字を定義できると仮定すると

 ',' ',' '\n' 

次に、各要素を各配列に追加しながら、ファイルを1行ずつ読み取ります。

#define ARRAY_SIZE 1000 

string someString[ARRAY_SIZE];
double someDoubble[ARRAY_SIZE];
double someDoubble[ARRAY_SIZE]; 

次に、私が読んでいるテキストファイルは

somestring, someDouble, someDouble\n    

つまり、区切り文字はコンマ、コンマ、改行文字です。

4

1 に答える 1

1

区切り文字とカウントについて非常に確信がある場合は、次を使用できます

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    fstream fs;
    fs.open("abc.txt",ios::in);         //1
    string str;
    int counter = 0;
    vector<string> vecString;
    vector<double> vecDouble1;
    vector<double> vecDouble2;
    while(getline(fs, str))             //2
    {
        char *sArr = new char[str.length()+1];          //3
        strcpy(sArr, str.c_str());
        char *pch = strtok(sArr,",");                   //4
        vecString.push_back(pch);                       //5
        pch = strtok(NULL,",");
        vecDouble1.push_back(atof(pch));                //6
        pch = strtok(NULL,",");
        vecDouble2.push_back(atof(pch));
        delete[] sArr;                                  //7
    }
    cin.ignore();
}

ベクトルよりも配列を使用することをお勧めします。

オンデマンドでの説明:

  1. ストリーム経由で入力モードでテキスト ファイルを開きます

  2. ファイルからテキストを 1 行ずつ取得します。

  3. constaを非 constにキャストするのは安全ではないため、この中間の char 配列が使用されます。

  4. 区切り文字に基づいて入力行をトークン化します(あなたの場合は単一のコンマ)。チュートリアルについては、これを参照してください。

  5. 最後に vector に要素を追加します。

  6. atof()に変換するために使用さstringdoubleます。

  7. 中間文字ポインターを解放します。

于 2013-08-17T04:21:09.247 に答える