There are multiple ways of doing it. You could read it into a string and process it manually based on spaces. Or you could use stringstream to extract numerical values into array/vector. That however, still requires you to remove the name before you do it.
Here is a little code that reads the file content into an unordered_map which is essentially a dictionary as defined in other languages.
void read_file(const std::string& path) { std::ifstream in(path); // file stream to read file std::unordered_map<std::string, std::vector<double>> map; /* * map structure to hold data, you do not have to use this. * I am using it only for demonstration purposes. * map takes string (name) as KEY and vector<double> as VALUE * so given a NAME you can get the corresponding grades VECTOR * i.e.: map["Johnson"] --> [85, 83, 77, 91, 76] */ std::string line; while (std::getline(in, line)) { // read entire line if (line == "") continue; // ignore empty lines int last_alpha_idx = 0; // name ends when last alphabetic is encountered for (size_t i = 0; i < line.size(); i++) if (std::isalpha(line[i])) last_alpha_idx = i; // get index of last alpha std::string name = line.substr(0, last_alpha_idx + 1); // name is from index 0 to last_alpha_idx inclusive (hence +1) std::string numbers = line.substr(last_alpha_idx + 1); // array values the rest of the line after the name std::stringstream ss(numbers); // this is an easy way to convert whitespace delimated string to array of numbers double value; while (ss >> value) // each iteration stops after whitespace is encountered map[name].push_back(value); } }
You could read it into an array, the code will not change dramatically. I chose string as KEY and vector<double> as VALUE to form KEY/VALUE pairs for the dictionary (map).
As you can see in the code, it looks for the last alphabetic character in each line and takes its index to extract the name from the read line. Then it takes the rest of the string (just the numbers) and puts them into a stringstream which will extract each number individually in its inner loop.
Note: the code above supports having full names (e.g. "Johnson Smith 85 83 77 91 76").