我很习惯使用C进行文件操作,但现在我正在学习C ++,而且我正在开发一个项目,其中包含整数值的.txt文件,每个文件都用逗号分隔,方式如下: 00,01,02,11,45,00,55,16,00
读取每个int并将它们存储在向量中的最有效方法是什么?
答案 0 :(得分:3)
将getline
与自定义分隔符一起使用以分割输入,然后转换并推送。
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
istringstream in{"00,01,02,11,45,00,55,16,00"};
string num;
vector<int> values;
while(getline(in, num, ','))
{
values.push_back(stoi(num));
}
for(auto i : values)
cout << i << ' ';
return 0;
}
答案 1 :(得分:1)
C ++具有函数getline
,它允许您从流中读取,直到找到指定的分隔符。为此,您可以从输入字符串构建字符串流,然后使用getline读取每个标记。
以下是一个例子:
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main() {
string numbers = "00,01,02,11,45,00,55,16,00";
stringstream sstream(numbers);
string token;
vector<string> result;
while(getline(sstream, token, ',')){
result.push_back(token);
}
return 0;
}
答案 2 :(得分:1)
以下解决方案效果很好,应该非常快。
#include <string>
#include <iostream>
#include <vector>
int main() {
std::string input = "00,01,02,11,45,00,55,16,00";
std::vector<int> output;
std::string holder;
for (auto it = input.begin(), end = input.end(); it != end; ++it) {
if (*it != ',')
holder.push_back(*it);
else {
output.push_back(std::stoi(holder));
holder.clear();
}
}
// Print the output to demonstrate validity
for (auto it = output.begin(), end = output.end(); it != end; ++it) {
std::cout << *it << std::endl;
}
return 0;
}
答案 3 :(得分:1)
您也可以先提取数字而不提取字符串。
int number;
std::vector<int> values;
while (inFile >> number) {
values.push_back(number);
inFile.ignore(std::numeric_limits<std::streamsize>::max(), ',');
}
您可以使用:
而不是忽略char comma;
inFile >> comma;