将一串数字解析为整数数组| C ++

时间:2012-10-15 05:53:33

标签: c++ arrays string parsing csv

我有一个文本文件,数字范围从0到255,用逗号分隔。我希望能够将这些数字中的每一个存储到整数数组中。文本文件可能包含的示例是: “32,51,45,12,5,2,7,2,9,233,132,175,143,33 ......”等

非常缺乏使用C ++编程的经验,所以请光临我。到目前为止我设法做的是让我的程序将文本文件中的数据存储为字符串并将其输出到屏幕上。我接下来需要做的是将该字符串的值存储在整数数组中,用逗号分隔数字。

这是我到目前为止编写的代码,我在使用它时遇到了问题;

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;

非常感谢任何有关如何做到这一点的建议。

1 个答案:

答案 0 :(得分:-1)

看起来你的字符串标记代码有点偏。特别是你需要确保在整数的字符串上调用atoi()来获得整数。我将专注于解析字符串。

你可以使用的一件事是C strtok。我建议这主要是因为你的情况相当简单,这可能是最简单的方法。

您要寻找的代码基本上是这样的:

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

strtok()接受两个参数:指向您正在标记的C样式字符串(char *)的指针,以及分隔符字符串(请注意,分隔符字符串中的每个字符都被视为自己的分隔符)。 / p>

我应该提到strtok不是线程安全的,你还必须确保从文件中提取的字符串以空字符\0结尾。

this question的答案为我的解决方案提供了许多替代方案。如果您更喜欢使用std::stringstream,我建议您查看该页面上的第5个答案。

关于PDB的问题,你得到的确切错误是什么?