1

0 ~ 255 の範囲の数字がコンマで区切られたテキスト ファイルがあります。これらの各数値を整数配列に格納できるようにしたいと考えています。テキスト ファイルに含まれる内容の例は次のとおりです。「32,51,45,12,5,2,7,2,9,233,132,175,143,33...」など

プログラムでテキスト ファイルのデータを文字列として保存し、画面に出力することができました。次に行う必要があるのは、その文字列の値を整数配列に格納し、数値をコンマで区切ることです。

これは私がこれまでに書いたコードですが、動作させるのに問題があります。

int _tmain(int argc, _TCHAR* argv[])
{
   string line;
   ifstream myfile ("example.txt");
   if (myfile.is_open())
   {
       while ( myfile.good() )
       {
           getline (myfile,line);
           cout << line << endl;
       }
       myfile.close();
   }

   else cout << "Unable to open file"; 

//STRING CONVERSION
std::string str = line;
std::vector<int> vect;

std::stringstream ss(str);

int i = 0;

while (ss >> i)
{
    vect.push_back(i);

    if (ss.peek() == ',')
        ss.ignore();
}

system("pause");
return 0;
4

1 に答える 1

-1

文字列をトークン化するためのコードが少しずれているようです。特に、整数を取得するには、整数の文字列に対して atoi() を呼び出す必要があります。ただし、文字列の解析に焦点を当てます。

使用できるものの 1 つは、C のstrtokです。これをお勧めする主な理由は、ケースがかなり単純であり、おそらくこれが最も簡単な方法だからです。

探しているコードは、基本的に次のとおりです。

char* numStr = strtok(str.c_str(), ",");
while (numStr)
{
    vect.push_back(atoi(numStr));
    numStr = strtok(NULL, ",");
}

strtok() は、トークン化する C スタイルの文字列 (char*) へのポインターと、区切り文字の文字列 (区切り文字列の各文字が独自の区切り文字として扱われることに注意してください) の 2 つの引数を取ります。

strtok はスレッド セーフではないことに注意してください。また、ファイルから抽出した文字列が null 文字で終わるようにする必要もあります\0

この質問に対する答えは、私の解決策に代わる多くの選択肢を提供します。使用したい場合はstd::stringstream、そのページの 5 番目の回答をご覧になることをお勧めします。

PDB に関する問題に関して、発生している正確なエラーは何ですか?

于 2012-10-15T06:23:38.020 に答える