Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   need help in vectors (http://www.go4expert.com/forums/help-vectors-t25108/)

doforumda 1Mar2011 14:41

need help in vectors
 
hi I am trying to read text from text file and put it in a vector v1. then I copy text from v1 to another vector v2.
my text file is in this format
Code:

studentName
Student Name One
FatherName
Father Name of Student One

separator

studentName
Student name Two
FatherName
Father name of Student Two

separator

studentName
Student Name three
FatherName
Father Name of Student three

separator

studentName
Student name four
FatherName
Father name of Student four

so while writing text to v2 from v1 I dont want to write "studentName", FatherName and separator. I do not want to write these because these are my separators. I just want to write student name one, father name of student one and so on.

here is my code so far
Code:

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

int main()
{
        vector<string> v1;
        vector<string> v2;
        string line;

        ifstream in("names.txt", ios::in);
        while(!in.eof()) {
                getline(in, line);
                v1.push_back(line);
        }
        //cout << v1.size();
        copy(v1.begin(), v1.end(), v2.begin());
        int ii;
        for(ii = 0; ii < v2.size(); ii++) {
                cout << v2[ii];
        }
        system("pause");
        return 0;
}

while running the above code it also displays this error

Code:

Debug assertion failed
Expression: vector iterator + offset out of range

Please help how can I achieve above solution?

Targen 5Mar2011 06:17

Re: need help in vectors
 
Hello. First thing, the error you get is from the copy() function you use to make v2 equal to v1. The simple way to fix this is to remove that and instead use an equals sign:

v2 = v1;

That gets rid of the error. Now, for the lines of text you do not want to display, I could only think of one way to do so, and there may be a better way, but this does work. All you would have to do is have an if statement under the line:

getline(in, line);

This if statement would pretty much just say, if line contains "studentName", "FatherName", or "separator", continue (literally, use a continue statement). Else, push line onto vector.

To me, that is the simplest way to achieve the solution you want. Other than just removing studentName, FatherName, and separator from the text file. But I assume you can't do that. Anyway, I hope this helped.

Oh, and you might want to close the text file at the end of your code also. I'm not sure if you just hadn't gotten to that yet, but it wasn't in your code, so I thought I'd mention it.

Kurt Bales
UAT Student


All times are GMT +5.5. The time now is 17:42.