我有一个文本文件,其中包含 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;
最佳答案
看起来您用于标记化字符串的代码有点不对劲。特别是您需要确保在整数字符串上调用 atoi() 以获得整数。不过,我将专注于字符串的解析。
您可以使用 C 的 strtok .我推荐这个主要是因为你的情况很简单,这可能是最简单的方法。
您要查找的代码基本上是这样的:
char* numStr = strtok(str.c_str(), ",");
while (numStr)
{
vect.push_back(atoi(numStr));
numStr = strtok(NULL, ",");
}
strtok() 有两个参数:一个指向您正在标记化的 C 风格字符串 (char*) 的指针,以及分隔符字符串(请注意,分隔符字符串中的每个字符都被视为其自己的分隔符)。
我应该提一下,strtok 不是线程安全的,您还必须确保从文件中提取的字符串以空字符 \0
结尾。
this question 的答案为我的解决方案提供许多替代方案。如果您更喜欢使用 std::stringstream
,那么我建议您查看该页面上的第 5 个答案。
关于 PDB 的问题,您得到的确切错误是什么?
关于c++ - 将一串数字解析为整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890001/