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() 以获取整数。不过,我将专注于字符串的解析。

您可以使用的一件事是 C 的strtok。我推荐这个主要是因为你的情况很简单,这可能是最简单的方法。

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

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

strtok() 有两个参数:一个指向要标记的 C 样式字符串 (char*) 的指针,以及分隔符字符串(请注意,分隔符字符串中的每个字符都被视为自己的分隔符)。

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

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

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

于 2012-10-15T06:23:38.020 回答