C++ 将数字字符串解析为整数数组
我有一个文本文件,数字范围为0-255,用逗号分隔。我希望能够将这些数字存储到一个整数数组中。文本文件可能包含的内容示例如下:; “32,51,45,12,5,2,7,2,9233132175143,33…”等 我已经设法让我的程序将文本文件中的数据存储为字符串并在屏幕上输出。接下来我需要做的是将该字符串的值存储在整数数组中,用逗号分隔数字 这是我到目前为止所写的代码,我在让它工作时遇到了问题C++ 将数字字符串解析为整数数组,c++,arrays,string,parsing,csv,C++,Arrays,String,Parsing,Csv,我有一个文本文件,数字范围为0-255,用逗号分隔。我希望能够将这些数字存储到一个整数数组中。文本文件可能包含的内容示例如下:; “32,51,45,12,5,2,7,2,9233132175143,33…”等 我已经设法让我的程序将文本文件中的数据存储为字符串并在屏幕上输出。接下来我需要做的是将该字符串的值存储在整数数组中,用逗号分隔数字 这是我到目前为止所写的代码,我在让它工作时遇到了问题 int _tmain(int argc, _TCHAR* argv[]) { string li
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;
int-tmain(int-argc,_-TCHAR*argv[]
{
弦线;
ifstream myfile(“example.txt”);
如果(myfile.is_open())
{
while(myfile.good())
{
getline(myfile,line);
cout看起来您用于标记字符串的代码有点不对劲。特别是您需要确保对整数的字符串调用atoi()以获得整数。不过,我将重点讨论字符串的解析
有一件事你可以使用C语言,我建议你这样做主要是因为你的案例很简单,这可能是最简单的方法
您要查找的代码基本上如下所示:
char* numStr = strtok(str.c_str(), ",");
while (numStr)
{
vect.push_back(atoi(numStr));
numStr = strtok(NULL, ",");
}
strtok()接受两个参数:指向正在标记的C样式字符串(char*)的指针和分隔符字符串(请注意,分隔符字符串中的每个字符都被视为自己的分隔符)
我应该提到strtok不是线程安全的,您还必须确保从文件中提取的字符串以空字符结尾\0
这些答案为我的解决方案提供了许多替代方案。如果您更喜欢使用std::stringstream
,那么我建议您查看该页上的第五个答案
关于您的PDB问题,您得到的确切错误是什么?代码的哪一部分导致了问题?换句话说,您的问题是什么?@pedrofurla我得到的错误是“无法找到或打开PDB文件”即使文件正在定位和读取。但我的主要问题是我是否正在执行操作的第二部分(字符串转换)正确吗?这是正确的方法吗?编辑问题,使其提供正确的信息并实际提出问题。不要期望ppl只看你的问题并解决它。对于你的问题,我认为它会起作用,因为你有它(至少逗号分隔),尽管我认为如果你读完int
和peek()如果不返回逗号,则可能会中断循环(尽管下次读取时可能会失败)。以下情况如何:字符串终止符的斜杠错误,它应该是反斜杠(`\`)不是正斜杠。另外,不鼓励使用atoi
,而支持或。@JoachimPileborg我犯了一个简单的打字错误。我不认为这有什么理由被否决。我的答案提供了一个包含相关来源和替代选项的解决方案。您的评论会记录首选电话。