Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2007, 12:47   #1
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию Перегрузка ввода

Люди кто знает как перегрузить функцию getline? Короче задание сделать класс Строка, и перегрузить осоновные операции для работы с ним. Все я сделал, только вот перегрузить getline нада, а то он токо текст до пробела вводит.
Вот перегрузка ввода
Код:
istream &operator>>(istream &input, Strings &s)
{
	char temp[100];
	input>>setw(100)>>temp;
	s=temp;
	return input;
}
MaTBeu вне форума Ответить с цитированием
Старый 15.12.2007, 15:35   #2
lacost
Пользователь
 
Регистрация: 25.03.2007
Сообщений: 67
По умолчанию

ну вообще тот же cin>> - это потоковый ввод и пробел это окончание ввода. Используй в перегрузке функции getc или gets не помню точно посмотри описание в библиотеках, но для них пробел не являеться окончанием ввода.
lacost вне форума Ответить с цитированием
Старый 16.12.2007, 12:33   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Ну и как ты прикажешь мне это реализовать? Ты доганяешь, что мне в этой функции надо вернуть обьект типа "istream" то бишь "input". А как я его верну, если gets() - это функция из другой библиотеки?
MaTBeu вне форума Ответить с цитированием
Старый 16.12.2007, 14:27   #4
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

cin.get( *cout.rdbuf() );

вот этот пример работает
Код:
    char    ch;

    cout << "Write a sentence:" << endl;
    cin.unsetf( ios::skipws );
    while( (cin >> ch).good() && ch != '\n' ) {
        cout << ch;
    }
    cout << endl;
еще встречал что есть некий манипулятор noskipws однако не встречал компилятор который это сьедает, пример такой
Код:
 cin >> noskipws; // разрешает ввод пробелов
cin >> // ввод с пробелами
cin >> skipws; // возвращает поведение cin поумолчанию
Как бы там ни было смысл один: по умолчанию cin cчитает символом разделителем пробел, изменить такое поведение можно с помощью манипуляторов!

в частности вот статья http://www.find-info.ru/doc/cpp/001/iostream.htm в главе 20.9 как раз рассказывается о загадочном манипуляторе noskipws?

Последний раз редактировалось PuzzleC; 16.12.2007 в 15:17.
PuzzleC вне форума Ответить с цитированием
Старый 16.12.2007, 14:51   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Я попробовал, но оно не заработало. Может я тебя неправлино понял? Напиши код как ты себе это представляешь.
MaTBeu вне форума Ответить с цитированием
Старый 17.12.2007, 00:22   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Я тебе очень благодарен, за то что ты мне поведал о манипуляторах, но увы они в моей проге не помогут. По той простой причине, что работают они только с char-данными, считывая пробел как букву, а не как разделяющий символ. Вобщем получится то же слово, только с буквами под названием "пробел". А мне нада перегрузить getline, чтобы с char *-данными работать.
MaTBeu вне форума Ответить с цитированием
Старый 17.12.2007, 05:21   #7
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Ты доганяешь, что мне в этой функции надо вернуть обьект типа "istream" то бишь "input".
Цитата:
Сообщение от MaTBeu Посмотреть сообщение
А мне нада перегрузить getline, чтобы с char *-данными работать.
Если тебе надо вернуть поток то и работай с потоком getline обьект типа "istream" не возвращает. Помоему ты усложняешь, зачем тебе здесь гэтлайн?
PuzzleC вне форума Ответить с цитированием
Старый 17.12.2007, 20:05   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Извини, я неправильно выразился. Мне нужно, чтобы при операции cin>>s1, вызывалась перегруженная функция ">>" и чтобы она вводила строку, то бишь и пробелы тоже. Дело в том, что прога работатет с char * - данными, и это конкретно усложняет мне задачу. Попросту я не знаю как ввести строку с пробелами.
MaTBeu вне форума Ответить с цитированием
Старый 18.12.2007, 23:10   #9
1ntro
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

Цитата:
istream& operator>>(istream& is, blabla& str)
{
const int N = 65536;
char temp[N] = {0};
size_t Length = 0,
Total = 0;
do
{
is.getline(temp + Total, N - Total);
Length = strlen(temp + Total);
if(Length == 0)
break;
Total += Length + 1;
temp[Total - 1] = '\n';
} while(Total < N);
temp[Total - 1] = 0;
str = temp;
return is;
}
Нечто вроде
1ntro вне форума Ответить с цитированием
Старый 23.12.2007, 16:22   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Это тоже не пашет. Ладно забей, я у препода спрошу.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перегрузка + softrix Общие вопросы C/C++ 2 21.06.2008 22:27
Перегрузка функций... bondik Общие вопросы C/C++ 12 28.04.2008 01:07
Перегрузка ++ Dark_Maks Общие вопросы C/C++ 2 18.12.2007 09:27
перегрузка функций Snake_ua Общие вопросы Delphi 3 26.11.2007 10:54
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44