简体   繁体   中英

Reading one line at a time C++

I have a file that has strings such as

Hello my name is Joe

How are you doing?

Good you?

I'm trying to output that file as it is, but my program is outputting it as "HellomynameisJoeHowAreyouDoing?Goodyou?" I'm having problems with spaces and new lines.

int main (int argc, char* argv[])

{
index_table table1;

string word;
ifstream fileo;

    fileo.open(argv[1]); //where this is the name of the file that is opened

    vector<string> line;

    while (fileo >> word){
        line.push_back(word);
    }
    cout << word_table << endl;
    for (int i=0; i < line.size(); i++)
    {
        if (find(line.begin(), line.end(), "\n") !=line.end()) 
            cout << "ERRROR\n"; //My attempt at getting rid of new lines. Not working though.
        cout << line[i];
    }
    fileo.close();

return 0;

Just use: std::getline

while (std::getline(fileo, word))
{
        line.push_back(word);
}

And then,

for (int i=0; i < line.size(); i++)
{
  std::cout<<line[i]<<std::endl;
}

OR simply:-

std::copy(line.begin(), line.end(),
           std::ostream_iterator<std::string>(std::cout, "\n") );

//With C++11
for(const auto &l:line)
  std::cout<<l<<std::endl;

An alternate solution (with no custom loops):

#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

struct line_reader : std::ctype<char>
{
    line_reader() : std::ctype<char>(get_table()) {}

    static std::ctype_base::mask const* get_table()
    {
        static std::vector<std::ctype_base::mask> rc(table_size, std::ctype_base::mask());
        rc['\n'] = std::ctype_base::space;
        rc[' '] = std::ctype_base::alpha;
        return &rc[0];
    }
};

int main()
{
    std::ifstream fin("input.txt");
    std::vector<std::string> lines;
    fin.imbue(std::locale(std::locale(), new line_reader())); // note that locale will try to delete this in the VS implementation
    std::copy(std::istream_iterator<std::string>(fin), std::istream_iterator<std::string>(), std::back_inserter(lines));
    // file contents now read into lines
    fin.close();
    // display in console
    std::copy(lines.begin(), lines.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return 0;   
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM