4.21. Замена в текстовом файле последовательностей пробелов на один пробел

4.21. Замена в текстовом файле последовательностей пробелов на один пробел

Проблема

Имеется текстовый файл с последовательностями пробелов различной длины и требуется заменить каждое вхождение такой последовательности на единственный пробел.

Решение

Для чтения непрерывной последовательности непробельных символов из потока в строку используйте шаблон функции operator>>, определенный в <string>. Затем используйте его двойника operator<<, который записывает каждую из этих последовательностей в выходной поток, и после каждой из них добавьте по одному пробелу. Пример 4.30 дает краткий пример этой методики.

Пример 4 30. Замена последовательностей пробелов на один пробел

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int main(int argc, char** argv) {

 if (argc < 3)

  return(EXIT_FAILURE);

 ifstream in(argv[1]);

 ofstream out(argv[2]);

 if (!in || !out)

  return(EXIT_FAILURE);

 string tmp;

 in >> tmp;  // Прочитать первое слове

 out << tmp; // Записать его в выходной поток

 while (in >> tmp) { // operator>> игнорирует пробелы, так что все, что

  out << ;        // я должен сделать, - это записать пробел и каждую

  out << tmp;        // последовательность «непробелов»

 }

 out.close();

}

Обсуждение

Это просто сделать, если использовать потоки и строки. Даже если требуется реализовать другой вариант этого — например, чтобы сохранить переходы на новую строку, — эта методика будет работать. Если требуется добавить переходы на новые строки, для их расстановки в нужных местах используйте решение, представленное в рецепте 4.16.

Смотри также

Рецепты 4.15 и 4.16.