C ++从文件中读取int,每个数字都用逗号分隔

时间:2017-03-26 01:37:30

标签: c++ file

我很习惯使用C进行文件操作,但现在我正在学习C ++,而且我正在开发一个项目,其中包含整数值的.txt文件,每个文件都用逗号分隔,方式如下:     00,01,02,11,45,00,55,16,00

读取每个int并将它们存储在向量中的最有效方法是什么?

4 个答案:

答案 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;