假设我有一个文本文件:
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.
拆分为97
和Joines, 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();
}
答案 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);