【问题标题】:C++ deletes the spaces in text file after changesC ++在更改后删除文本文件中的空格
【发布时间】:2011-11-26 20:00:27
【问题描述】:

好的,我的简单程序遇到了另一个问题。我的程序获取文本文件,读取它,然后删除最后一个符号并输出带有更改的新文本文件。它按照我的意愿做所有事情,只是它确实删除了所有空格。有什么解决方案吗? 代码如下:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    char symbols[10000];
    ofstream outFile("outFile.out");
    ifstream inFile("inFile.in");

    for(int i=0;i<10000;i++)
    {   
        inFile >> symbols[i];
    }       

    for(int j=0;j<10000;j++)
    {   
        if(symbols[j]=='\0')
        {       
            symbols[j-1] ='\0';
            break;          
        }               
    }       

    if(outFile.is_open())
    {   
        for(int l=0;l<10000;l++)
        {       
            outFile << symbols[l];
        }               
    }       

    inFile.close();
    outFile.close();
    return 0;
}

附: 我的意思是如果我给它一个文本 世界你好

它输出 Helloworl 空间神奇地消失了..

【问题讨论】:

    标签: c++ arrays fstream


    【解决方案1】:

    &gt;&gt; 提取运算符与 char 类型一起使用时,会从输入文件中读取下一个 非空白 字符。因此,这会跳过输入中的所有空格。

    您可以使用noskipws 操纵器关闭此功能,如下所示:

    inFile >> noskipws >> symbols[i];
    

    或者,您可以避免使用&gt;&gt; 运算符。例如,您可以使用istream::read()

    【讨论】:

    • @sehe:在我完成编辑并重新加载页面之前,我没有看到您的答案。 Stack Overflow 不再在正常的编辑-优化-发布周期中显示新答案。
    • 嗯好的——我相信你。仍然想出fopen / fread 的初始响应几乎值得我的-1。我暂时将其保持中立 - 作为公平的竞争对手,near-相等的时间:)
    • @sehe:为你的 +1,所以它看起来不会不平衡。 :)
    【解决方案2】:

    使用

    inFile.unsetf(std::ios::skipws);
    

    还有一个操纵器,如果你包含iomanip

    inFile >> std::noskipws;
    

    【讨论】:

    • 应该是 >> 不是
    • 是的,我最初弄错了。我经常遇到这种特殊的错字。源于我猜想输入更多的流输出:)
    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2014-08-07
    • 2019-12-05
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多