从这个文本文件中读取和分离信息的好方法是什么?

时间:2017-05-04 17:41:19

标签: c++ file file-io

假设我有一个文本文件:

83 71 69 97Joines, William B.
100 85 88 85Henry, Jackson Q.

我希望将每个数字存储在一个int数组中,并将每个全名存储到一个字符串数组中(例如,全名将为Joines, William B。)

最好的方法是什么,因为我辩论使用while (inputFile >> line)while (getline(inputFile, line))会更好。我不知道一次读一个单词或一次读一行是否更容易。我的主要问题是将97Joines, William B.拆分为97Joines, William B.,我不明白如何在C ++中进行操作。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main() {
    int counter = 0;
    int scores[40];
    string names[10];
    string filename, line;
    ifstream inputFile;


cout << "Please enter the location of the file:\n";
cin >> filename;

inputFile.open(filename);
while (inputFile >> line) {
    // if line is numeric values only, do scores[counter] = line;
    // if it is alphabet characters only, do names[counter] = line;
    //if it is both, find a way to split it // <----- need help figuring out how to do this!

}
inputFile.close();

}

2 个答案:

答案 0 :(得分:1)

根据您显示的文件结构,您可以这样阅读:

int a, b, c, d;
std::string name;
for (int i = 0; i < 2; ++i)
{
    // read the numbers
    inputFile >> a >> b >> c >> d;
    // read the name
    std::getline(inputFile, name);

    // do stuff with the data... we just print it now
    std::cout << a << " " << b << " " << c << " " << d << " " << name << std::endl;
}

由于数字是空格分隔的,因此很容易使用流操作符。此外,由于名称是最后一部分,我们可以使用std::getline来读取行的其余部分并将其存储在变量name中。

您可以使用std::cin尝试here

答案 1 :(得分:1)

你需要#include <cstdlib> strtol我确信有更好的方法可以做到这一点,但这是我所知道的唯一方法,这只适用于97joines和85Henry,

          string word; // to get joines,
          string str; // for 97
          string numword;
          inputFile >> numword;
          for(int k = 0; k < numword.length(); k++)
          {
              if(isdigit(numword[k]))
              {
                 str = str + numword[k];
              }
              else
              {
                word = word + numword[k];
              }
          }
          int num = strtol(str.c_str(), NULL, 0);