Reputation: 9
I was told to use a 2D array that reads all the contents of file below and stores it in a 2D array. Here is the file:
People often say that motivation doesn t last Well neither does bathing that s why we recommend it daily Ziglar
Someday is not a day of the week Denise Brennan Nelson
Hire character Train skill Peter Schutz
Your time is limited so don t waste it living someone else s life Steve Jobs
Sales are contingent upon the attitude of the salesman not the attitude of the prospect W Clement Stone
Everyone lives by selling something Robert Louis Stevenson
If you are not taking care of your customer your competitor will Bob Hooey
The golden rule for every businessman is this: Put yourself in your customer s place Orison Swett Marden
If you cannot do great things do small things in a great way Napoleon Hill
*above is a text file containing data
The file has lots of random spaces but I can just use cin
to ignore them. The part I am confused about is that each row has different amount of columns to process so I can't simply use a nested for-loop.
At the end I want to be able to cout << data[0][1];
and it should print out "often". Row is essentially the line number of the word.
Upvotes: 0
Views: 109
Reputation: 42
You can use getline and then stringstream to read the words.
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main() {
ifstream input;
string line;
string word;
string data[3][10]; //You need to dynamically allocate memory if you don't know the size of your input. I am doing this to keep it short
input.open("input.txt");
int i = 0;
while(getline(input, line)) { //Reading file line by line until the end of file
stringstream ss(line);
int j = 0;
while(ss) {
ss >> word; //word will become the next string in your line (People, often, say...)
data[i][j] = word;
j++;
}
i++;
}
return 0;
}
And you will get
cout << data[0][0] -> "People"
cout << data[0][1] -> "often"
.
.
etc.
Upvotes: 1