仅使用 <iostream>、 <fstream> 和 <cstdlib>清除字符串中的任何多余空格

Clear any extra spaces in a string by only using the <iostream>, <fstream> and <cstdlib>

本文关键字:gt lt 字符串 任何 空格 清除 多余 fstream iostream cstdlib      更新时间:2023-10-16

这是我上一个问题的链接,我有一些代码。

谢谢。

这是我目前掌握的代码。

#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
void clean_file(ifstream& fin, ofstream& fout);
int main()
{
    ifstream fin;
    ofstream fout;
    clean_file(fin, fout);
}
void clean_file(ifstream& fin, ofstream& fout)
{
    fin.open("string.txt");
    if (fin.fail())
    {
        cout << "File could not open.";
        exit(1);
    }
    fout.open("cleanString.txt");
    if (fout.fail())
    {
        cout << "File could not open.";
        exit(1);
    }
    char line;
    while (fin.get(line))
    {
        fout << line;
    }

    fin.close();
    fout.close();
}

我目前拥有的输入文件在一些单词之间有额外的空格,我想知道如何检查字符串是否有多个空格,如果有,用一个空格替换它。我想我必须自己检查每个字符,如果连续的字符都是空格,那么我只需要用一个替换它。我已经在网上搜索了我的问题,但我无法通过使用我之前提到的库来找到如何做到这一点。

只需逐字逐句地读取流,然后写下用一个空格分隔的单词(缺点是它也会删除所有换行符):

void clean_stream(std::istream& fin, std::ostream& fout) {
    std::string word;
    bool first = true;
    while (fin >> word) {
        if (!first)
            fout << ' ';
        fout << word;
        first = false;
    }
}