Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Задача на строки.


Автор: Mcicool 27.5.2007, 19:08
Вот мини задача. 

Пусть во входном потоке находится последовательность литер, заканчивающаяся точкой. Вывести в выходной поток эту последовательность, удалив из неё все вхождения слова "the". Массивы и класс string не использовать.

Автор: Voldemar2004 27.5.2007, 21:26
На форуме уже было. Много раз. Есть готовая функция в STL замены слов в тексте. 
Цитата(Mcicool @  27.5.2007,  20:08 Найти цитируемый пост)
 Массивы не использовать.
и как без них делать такую задачу ?

Автор: Palladin 27.5.2007, 23:41
Походу надо сразу считывать введенную информацию не занося в перменые, и сразу же искать слово "the", есть какаята функция такая, но я не помню, вроде getch() или что-то такое

Автор: Dov 27.5.2007, 23:51
Так, что ли, нужно? Не совсем понял задачу.
Код
int main()
{
    char ch1;
    char ch2 = ' ';
    char ch3 = ' ';

    do
    {
        cin.get(ch1);
        if(ch1 == 't')
        {
            cin.get(ch2);
            if(ch2 == 'h')
            {
                cin.get(ch3);
                if(ch3 != 'e')
                    cout << ch1 << ch2 << ch3;
            }
            else
                cout << ch1 << ch2;
        }
        else
            cout << ch1;

    }while(ch1 != '.' && ch2 != '.' && ch3 != '.');

    cout << endl;
    
    return 0;    
}

Автор: Xenon 28.5.2007, 00:03
Dov, Я так понимаю, что работа чисто с потоками. Допустим сделать std::cout << "Hello world" или не обязательно в cout, а в какой-нибудь другой объект, а потом из него посимвольно копировать символы в cout, отображая таким образом строку, и выбрасывать слово this.

Автор: Dov 28.5.2007, 00:27
Цитата(Xenon @  28.5.2007,  00:03 Найти цитируемый пост)
Допустим сделать std::cout << "Hello world" 


Xenon, std::cout - это выходной поток. А у него символы нужно выводить из входного, т.е. из cin в cout, как я понял. Но прежде, их нужно туда(в cin) запихнуть. Я так думаю...  smile  

Автор: Xenon 28.5.2007, 00:37
Dov, просто, допустим, можно делать так:
Код

int main(int argc, char* argv[])
{
    std::ostringstream outstr;
    std::streambuf* old_cout_buf = std::cout.rdbuf(outstr.rdbuf());
    std::cout << "Hello world";
    std::cout.rdbuf(old_cout_buf);
    std::string result = outstr.str();
    std::cin.sync();
    std::cin.get();
    return 0;
}


То есть теперь в result будет то, что в cout. Я вот думал тут нечто похожее нужно сделать - сначала в cout запихнуть строку (на уровне кода), потом разобрать ее, где-то подправить и опять сунуть в cout и таким образом вывести все дело на экран.

Добавлено @ 00:40
Но проще наверное из cin поместить в некий поток, там разобрать и поменстить в cout. Вот только как - я вот чего-то застопорился без string smile

Автор: Dov 28.5.2007, 01:06
Xenon, я чё-то опять недопонял. Где у тебя входной поток?

Автор: Xenon 28.5.2007, 02:02
Dov, ну "Hello world" и есть та строка, которую мы разбираем smile

Автор: Mcicool 28.5.2007, 14:07
Мда, вот и я запутался. Как решать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)