![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
anatox91 |
|
||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
подскажите пожалуйста как реализовать сабж. с operator<< собсно все легко, а вот этот оператор как-то не доганяю как реализовать
приват-секция моего класса:
пишу
а дальше че-то не доганяю, подскажите пожалуйста заранее большое спасибо! с меня + ![]() Это сообщение отредактировал(а) anatox91 - 16.5.2008, 13:31 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
ну во первых cstring &obj не const - туда же записывается.
проще всего - через std::string
Это сообщение отредактировал(а) baldina - 16.5.2008, 13:23 |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
про конст забыл
![]() через std::string я то знаю что можно сделать, интересно можно ли это сделать без классов типа std::string, CString -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
можно. вызывай в цикле in.getline () с временным буфером, перераспределяй память и копируй в свой char*
|
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
ясно, попробую
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
короче решил для начала написать функцию , которая добавляла бы в конец строки другую строку, чтобы меньше было возни с перераспределением памяти, вроде работает нормально, но почему-то всегда в конец добавляет символ пробела
![]() вот код:
и еще. baldina, я только не понимаю, какое тогда условие задать для цикла? Это сообщение отредактировал(а) anatox91 - 16.5.2008, 20:26 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
anatox91, а зачем ты лишний раз память выделял и освобождал? Кто тебе мешал сразу под buf выделить память, необходимую для хранения результирующей строки (строка 13). Тогда бы тебе не нужно было делать строки 19-23
|
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
bsa, ты имел ввиду что-то типа такого ?
Это сообщение отредактировал(а) anatox91 - 16.5.2008, 22:08 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
anatox91, да.
|
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
а можно поподробнее насчет цикла
![]()
и какое условие ставить я чет не пойму... -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
anatox91, getline() читает строку до тех пор, пока не будет достигнут конец строки, конец файла, либо не заполнится предоставленный буфер.
|
|||
|
||||
opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 2 Всего: 14 |
[+] выделение памяти и копирование происходит только один раз [-] данная реализация не обращает внимания на символы-разделители, читает все скопом в память |
|||
|
||||
opjox |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 2 Всего: 14 |
пофиксил:
|
||||
|
|||||
anatox91 |
|
||||||||||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
чет не работает
![]() после ввода строки сразу закрывается прога:
и если так, то тоже не выводит ничего после ввода:
кстати а разве катит простой ноль в конце:
вместо этого
? Это сообщение отредактировал(а) anatox91 - 18.5.2008, 10:39 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||||||||||
|
|||||||||||||
bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
катит. Но лучше типизировать (т.е. использовать '\0'), имхо. |
||||||||
|
|||||||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
а почему не работает пример opjox'a можете подсказать? вроде разобрался в его примере и по-моему все должно работать... но не работает...
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
opjox |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 2 Всего: 14 |
'\0' – подчеркнет тип, но, имхо, для глаза 0 приятнее выглядит. На нижнем уровне присвоение будет выполнено одинаково.
Засада сидит в строчке:
если код собран с помощью g++, то для потока std::cin функция in_avail упорно возвращает 0, даже несмотря на то, что в буфере есть данные. Причем, на VS2008 код работает на ура. Чтобы все заработало, надо в len занести кол-ва данных в буфере. Или же модифицировать механизм поиска разделителя. Сейчас будет хоккей ![]() |
||||
|
|||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
попробовал, действительно на визуалке все фурычит, а на MinGW не хочет...
opjox, спасибо кстати, очень интересные функции узнал, + -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 2 Всего: 14 |
В силу обстоятельств
![]() Решить проблему так и не смог. Попробовал найти замену in_avail(), но тщетно. Потом решил пойти другим путем – пройтись по всему буферу до разделителя или до окончания данных. Тут уже все пошло лучше и даже удалось написать рабочий код для VS2008:
Но у этого кода есть проблема: если мы достигнем не разделителя, а конца данных, то тогда происходит сброс всего буфера, из-за чего все данные в нем теряются. Но для g++ оказалось всю намного хуже и без этого. Функция sungetc отрабатывала всего один раз, а остальные вызовы игнорировались. Из-за этого не удается достич начала данных. Похоже, придется отказаться от этого варианта, не вижу я пока больше способов решения проблем этого пути. |
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
Что-то кажется мне с getline() попроще будет. Пусть даже и с неоднократным выделением памяти: производительность тут имхо не слишком важна ибо
|
||||
|
|||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
всем спасибо, решил все-таки через string пусть будет
![]() хотя конечно странно что пример opjox'а не работает в MinGW, но в VS2008 работает... -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |