我有一个包含
等字符串的文件您好,我的名字是Joe
你好吗?
你好吗?
我正在尝试按原样输出该文件,但我的程序输出为“HellomynameisJoeHowAreyouDoing?Goodyou?”我遇到了空格和新线的问题。
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();
返回0;
答案 0 :(得分:7)
只需使用:std::getline
while (std::getline(fileo, word))
{
line.push_back(word);
}
然后,
for (int i=0; i < line.size(); i++)
{
std::cout<<line[i]<<std::endl;
}
或者简单地说: -
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;
答案 1 :(得分:0)
备用解决方案(没有自定义循环):
#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;
}