Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Работа со строкой 
:(
    Опции темы
stat007
Дата 30.10.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: нет
Всего: -4



Стоит такая задача:
Прочитайте последовательность слов из потока ввода. Пусть слово Quit будет означать конец ввода. Распечатать слова в порядке их ввода. Исключить одинаковые слова. Отсортирировать строку.

Я попытася выполнить это: "Пусть слово Quit будет означать конец ввода", но помоему не так как надо.
Код

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std; 
int _tmain(int argc, _TCHAR* argv[])
{
    bool stop=false;
    string st="quit";
    cout<<"Enter string: "<<endl;
    do
    {
        getline(cin, st);
        if(st!="quit")
        {
            cout<<"Your entrens: "<<st;
        cout<<endl;
        }
        else
        {
            cout<<"Good Bye!"<<endl;
            stop = true;
        }
    }
    while(stop==false);
    cout<<st<<endl;
    system("pause");
    return 0;
}

Помогите разобраться...... smile 
PM MAIL   Вверх
586
Дата 31.10.2009, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 7
Всего: 146



Код
#include <iostream>
#include <string>
#include <list>
using namespace std;

list<string> words;

int _tmain(int argc, _TCHAR* argv[])
{
    string strInput;

    while(1)
    {
        cout<<"Enter string: ";
        getline(cin, strInput);
        if(strInput=="quit")
        {
            cout<<"Good Bye!"<<endl;
            break;
        }
        words.push_back(strInput);
    }

    if(words.empty())
        return 0;

    cout << "\nYour words:" << endl;
    for(list<string>::iterator i = words.begin(); i != words.end(); ++i)
        cout << *i << endl;

    words.sort();
    words.unique();

    cout << "\nSorted unique words:" << endl;
    for(list<string>::iterator i = words.begin(); i != words.end(); ++i)
        cout << *i << std::endl;

    system("pause");
    return 0;
}

PM   Вверх
zim22
Дата 31.10.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(586 @  31.10.2009,  02:43 Найти цитируемый пост)
words.unique();

unique не удаляет повторяющиеся слова, а просто перемещает их в конец контейнера.


--------------------
PM MAIL   Вверх
Dov
Дата 31.10.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(586 @  31.10.2009,  02:43 Найти цитируемый пост)
if(strInput=="quit")

Здесь неплохо было бы сделать что-то похожее на это:
Код
if(!stricmp(strInput.c_str(), "quit"))


Цитата(zim22 @  31.10.2009,  08:45 Найти цитируемый пост)
unique не удаляет повторяющиеся слова, а просто перемещает их в конец контейнера.

zim22, ты уверен? Смутные сомнения меня одолевают...  smile 

з.ы. кстати, по условию задания повторяющиеся слова и не нужно было удалять, просто не нужно было их печатать. Я так думаю...  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
zim22
Дата 31.10.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Dov @  31.10.2009,  12:39 Найти цитируемый пост)
ты уверен? Смутные сомнения меня одолевают...  

если выражаться точнее, то он не удаляет повторяющиеся элементы, а перемещает их в конец последовательности, причём на них можно ссылаться, но значения их не определены.
Цитата

MSDN: The number of elements in the sequence is not changed by the algorithm unique and the elements beyond the end of the modified sequence are dereferenceable but not specified.




--------------------
PM MAIL   Вверх
586
Дата 31.10.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 7
Всего: 146



Цитата(zim22 @  31.10.2009,  17:45 Найти цитируемый пост)
если выражаться точнее, то он не удаляет повторяющиеся элементы, а перемещает их в конец последовательности, причём на них можно ссылаться, но значения их не определены.
Цитата
MSDN: The number of elements in the sequence is not changed by the algorithm unique and the elements beyond the end of the modified sequence are dereferenceable but not specified.

Это про std::unique. А вот про std::list::unique :
Цитата(http://msdn.microsoft.com/en-us/library/thhhbacy%28VS.80%29.aspx)
list::unique 

Removes adjacent duplicate elements or adjacent elements that satisfy some other binary predicate from a list.

PM   Вверх
Adre
Дата 1.11.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.12.2008

Репутация: нет
Всего: нет



getline читает всю строку, а автору нужны слова.
 Т.е. если через пробел ввести сразу несколько слов, то это будет считаться одним словом.
Либо через char*, либо разбор строки.
Для исключения повторяющихся слов я бы использовал set.


Хотя если нужно еще и сортировать, то можно использовать map, где ключ - слово, а значение - номер (для распечатки последовательности ввода).

PM MAIL   Вверх
zim22
Дата 1.11.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(586 @  31.10.2009,  19:48 Найти цитируемый пост)
Это про std::unique. А вот про std::list::unique :

извиняюсь. глаз замылился.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.