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.