0

私は C++ が初めてで、プログラムに問題があります。何時間も何日も探しましたが、これに似た投稿がたくさんありますが、プログラムが機能しない理由がわかりません。

このようにデータを含むファイルがあります。

STRING FLOAT FLOAT

STRING INT

STRING FLOAT FLOAT FLOAT

STRING INT INT

浮く

浮く ...

したがって、最初の数行には、最初の列に文字列があり、残りの列に数値があり、ある時点では浮動小数点数だけがあります。

すべてのフロートの開始位置までデータを取得できましたが、残りの数値を配列に格納する方法がわかりません。(ベクトルを使用する方がはるかに簡単であることはわかっていますが、配列を使用する必要があります)。

これが私がやったことです。

void getData(string *ext, int size)
{
   istringstream is(*ext);
   float val;
   is >> val;
   float *arrVal = new float[10];    // I dont know the size of the Array.

   if(typeid(val) == typeid(float))  //IM NOT SURE ABOUT THIS AT ALL. I JUST DON'T KNOW HOW TO GET TO THE LINE WHERE THERE ARE NO STRINGS
   {
      arr[size] = atof(*ext.c_str());
    }                                  // I think this part is why it does not work.

int main()
{
ifstream File("t.txt");         
string line;                                        
int nLines(0);                                  
float *arrayValues =  new float[12];                


if(!inFile)                                         
{
    cerr << "Cannot open file." << endl;
    return -1;
}
else
{       
    while(getline(File, line))
    {
        getValues(&line, nLines);
        getPoints(&line);   //this function gets the values of the first lines.

        ++nLines;

    }
}

system("pause");
return 0;
}

したがって、基本的には、すべてのフロートが開始する行にジャンプする方法と、それらを配列に格納する方法を理解する必要があります。間違いが多いのは確かです。皆さんが私がやろうとしていることを理解してくれることを願っています。私は本当にどこでも見ましたが、何も見つかりません。

ありがとうございました !!

4

2 に答える 2

0

各ファイルを読み取ると、データが char で取得されます。- strtok を使用して、スペースで読み取られた各行をトークン化します。文字列の間にスペースがある場合、このロジックは機能しません。文字列が "STRRING" や "FLOAT" のような 1 語のみの場合は問題なく動作します。あなたの文字列が「私は天才です」のようなものである場合、それは機能しません:) -条件があなたの仕事をする必要がある場合は、各トークンを単純に検証します。文字列は [az] または [AZ] で始まります。数字は [0-9] を使用します。-一度検証。atoi や itoa などを使用して必要な変換を実行します。

于 2013-09-13T05:39:47.130 に答える