Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: замена символов в файле (с++)  (Прочитано 3762 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: замена символов в файле (с++)
« Ответ #30 : 17 Ноября 2015, 22:34:05 »
Гриб_под_зонтом, мой код пробовал?
Извините, я все еще учусь

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: замена символов в файле (с++)
« Ответ #31 : 17 Ноября 2015, 22:37:22 »
Гриб_под_зонтом, у тебя главная трабла в этом:
in >> s;Оператор >> в данном случае перегружен и является форматированным, т.е. шлёт нафиг все пробельные символы, среди которых \r и \n. Используй
s=in.get();Правда у тебя другие траблы вылезут (останется \r, которую надо игнорить и конец файла станет поломанным, т.к. ты через char пытаешься переносить, а в хедерах eof - int и как следствие в конец файла ты впихнешь значение этого eof(сам eof на HDD или где-то ещё (кроме хедера) не хранится, это лишь константа, которая возвращается, как признак конца файла)). Можешь их пофиксить, можешь просто построчно читать или в буфер (быстрее должно быть по идее) и добавлять в конце :. Т.е. минимально твой код должен быть таким (проверки на состояние потока и сообщения, если он поломан сам сделай)
Код: (cpp) [Выделить]
#include <iostream>
#include <fstream>

int main()
{
std::fstream in("IP.txt");
std::ofstream out("IPv.txt");

int s;//EOF в char не полезет.
while(in.good())//не по EOF заканчиваем чтение, а по плохому потоку
{
s=in.get();
if(s == '\n')
{
s = (int)':';
}
if(s!='\r'&&s!=EOF)
{
out << (char)s;
}
}
in.close();
out.close();
}
Если тебе в самом конце не нужно двоеточие, то подумай, как его оттуда убрать.
« Последнее редактирование: 17 Ноября 2015, 22:42:49 от peregrine »

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: замена символов в файле (с++)
« Ответ #32 : 17 Ноября 2015, 23:01:11 »
Гриб_под_зонтом,
 echo -e '1\r\n2\r\n3' | sed -z 's/\r\n/:/g'
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: замена символов в файле (с++)
« Ответ #33 : 19 Ноября 2015, 18:17:52 »
peregrine,
Спасибо, разобрался. Сейчас думаю как двоеточие в конце убрать

Пользователь решил продолжить мысль [time]20 Ноябрь 2015, 17:29:11[/time]:
Всё,понял: можно просто удалять последний символ и ничего мудрить не надо) Всем спасибо за ответы. Тема закрыта
« Последнее редактирование: 07 Февраля 2016, 00:19:07 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.