Чтобы исключить >>
для устранения пробелов в вводе, самое простое изменение - просто использовать is.get(c)
вместо is >> c
. std :: basic_istream :: get ведет себя как Неформатированная функция ввода и обеспечивает посимвольное чтение всего в файле. Оператор std :: basic_iostream >>
обеспечивает ввод Форматированный , который устраняет пробелы.
Изменение на istream. get()
обеспечивает поведение, которое вы описываете,
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char** argv) {
std::string fn {};
char c;
if (argc < 2) { /* validate filename provided */
std::cerr << "error: filename required.\n";
return 1;
}
fn = argv[1];
std::ifstream is (fn.c_str());
std::ofstream os ("temp.txt");
while (is.get(c))
if (c != '\r')
os.put(c);
string command = "mv temp.txt " + fn;
system(command.c_str());
}
Пример входного файла
$ cat dat/fleas2line.txt
my dog has fleas
my cat has none
Пример использования / выходной файл
Вы можете увидеть '\n'
isсохранены в вашем вводе.
$ hexdump -Cv temp.txt
00000000 6d 79 20 64 6f 67 20 68 61 73 20 66 6c 65 61 73 |my dog has fleas|
00000010 0a 6d 79 20 63 61 74 20 68 61 73 20 6e 6f 6e 65 |.my cat has none|
00000020 0a |.|
temp.txt
$ cat temp.txt
my dog has fleas
my cat has none
Наконец, избегайте использования 0XD
и 0XA
в вашем коде и вместо этого используйте сами символы, например '\r'
и '\n'
. Это делает код намного более читабельным. Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.