如何从文本文件打印后删除新行,并在打印时删除结束空格

时间:2018-02-18 03:13:59

标签: c++

                string foo ="";
                ifstream openfile(argv[i+1]);//argv[i+1] is file name
                if(openfile.is_open())
                { 
                    while(getline(openfile, foo))
                     {
                       istringstream myString(foo);
                       string w1;
                       while(myString >> w1)
                         cout<<w1<<' ';
                    cout <<""<< endl;
                }   

我需要正常打印文本,这意味着没有额外的换行符,每行末尾没有空格。

输出

Launch Terminal
< Words Words Words                                                                                                                                                                                                       
< Words Words Words Words Words Words                                                                                                                                                                                                       
<                                                                                                                                                                                                                                        
<                                                                                                                                                                                                                                        
< Words Words Words Words                                                                                                                                                                                                       
< Words Words Words Words                                                                                                                                                                                                        
< Words Words Words Words                                                                                                                                                                                                      
<                                                                                                                                                                                                                                        
<                                                                                                                                                                                                                                        
<                                                                                                                                                                                                                                        
<                                                                                                                                                                                                                                        
< Words 

谢谢

1 个答案:

答案 0 :(得分:1)

好吧,要删除换行符,只需替换它们即可。要摆脱每行末尾的空格,不要打印它们,你自己添加它们xD示例代码将是

string foo;
ifstream openfile (argv[i+1]);
if(openfile.is_open())
{ 
    while(getline(openfile, foo))
    {
        //Remove new line character, if any
        std::replace(foo.begin(), foo.end(), '\n', '');
        //Remove carraige return (windows new line is '\r\n' instead of just '\n')
        std::replace(foo.begin(), foo.end(), '\r', '');
        std::cout << foo; //print line
    }
}   

然而,也许你真的想在每一行之间添加一个空格(所以在你打印foo之后),因为其他方面,一行的第一个可能会坚持到最后一行,因为那里&#39 ; s空格或换行符以保持它们的安装。

编辑:如果你想保留原来的新行字符,请删除代码中的两行std::replace(...);)你可能还想在打印foo后打印一个endl,具体取决于输出你期待,因为你的问题不是很清楚

Edit2:当我得到更多关于你真正想要的信息时,这里有一个更新的代码(至少)删除每行末尾的额外空格。如果这仍然没有做你想要的,那就更清楚一下特定文件的输出应该是什么样子了!

string foo;
ifstream openfile (argv[i+1]);
if(openfile.is_open())
{
    while(getline(openfile, foo))
    {
        istringstream myString(foo);
        string w1;
        bool firstWord=true;
        while(myString >> w1)
        {
            if(firstWord==false)
            {
                cout << " ";
            }
            firstWord = false;
            cout << w1;
        }
        cout << endl;
    }
}