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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 21:39   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Вопрос Простая программа с очереддю(Queue,STL,C++)

Задача: Удалить из очереди заданное значение (ближайшее к голове), оставив другие без изменений.
Пример работы программы:
Пользователь вводит длину очереди, потом вводит слова, потом вводит слово которое нужно удалить из очереди(если это слово повторяется то программа должна удалить именно то слово которое находится ближе к голове)
Пример:

Enter size of queue: 5

1. Hi
2. Dog
3. Big
4. Dog //в этом примере программа должна удалить именно это слово так как оно находится ближе к голове
5. Cat

Enter word which we must delete: Dog

Я написала прогу на кажись она работает не совсем правильно, посмотрите пожалуйста(PS. я еще не пользовалась "штукой" string, то может там ошибки). Короче вот мой код:
Код:
#include <cstdlib>
#include <iostream>
#include <string>
#include <queue>

using namespace std;

int main()
{
    queue<string> myqueue;
    string st,k,p,f;
    int n,r;
    cout<<"Enter size of queue: ";
    cin>>n;
    for(int count=1, i=0;i<n;i++,count++)
    {
     cout<<count<<". ";
     cin>>st; //вписываем слова и кидаем их в очередь myqueue
     myqueue.push(st);
    }
    
    cout<<"Enter word which we must delete: ";
    cin>>f; //пишем слово которое мы хочем удалить из очереди
    queue<string> newqueue;
    for(int count=1;!myqueue.empty();count++) //здесь я сделала цыкл для того
    {                                          
     k=myqueue.front();
     newqueue.push(k);               //здесь я сделала цыкл для того
     if(myqueue.front()==f) r=count; // чтобы узнать какой по счету номер слова в очереди
     myqueue.pop();                  // который мы должны удалить
    }
    
    for(int count=1,i=0;i<--n;count++,i++) //цыкл для удаления нужного слова
    {
     if(r==count) newqueue.pop();
     p=newqueue.front();
     myqueue.push(p);
     newqueue.pop();
    }
    
    while(!myqueue.empty()) // ну это цыкл чисто для себя...(чтобы проверить как работает прога)
    {
     cout<<myqueue.back()<<endl;
     myqueue.pop();
    }

    system("PAUSE");
    return EXIT_SUCCESS;
}
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 06.05.2009, 22:32   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот так, вроде:
Код:
#include <cstdlib>
#include <iostream>
#include <string>
#include <queue>

using namespace std;

int main()
{
    queue<string> myqueue;
    string st,k,p,f;
    int n,r;
    cout<<"Enter size of queue: ";
    cin>>n;
    for(int count=1, i=0;i<n;i++,count++)
    {
     cout<<count<<". ";
     cin>>st; //вписываем слова и кидаем их в очередь myqueue
     myqueue.push(st);
    }

    cout<<"Enter word which we must delete: ";
    cin>>f; //пишем слово которое мы хочем удалить из очереди

    queue<string> newqueue;


    while(!myqueue.empty())
     {
      k = myqueue.front();
      myqueue.pop();
      if(k==f) break;
      newqueue.push(k);
     }

    while(!newqueue.empty())
     {
      k = newqueue.back();
      myqueue.push(k);
      newqueue.pop();
     }

    while(!myqueue.empty()) // ну это цыкл чисто для себя...(чтобы проверить как работает прога)
    {
     cout<<myqueue.front()<<endl;
     myqueue.pop();
    }

    system("PAUSE");
    return EXIT_SUCCESS;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.05.2009, 22:49   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Где-то есть ошибка (( вот посмотрите:
Изображения
Тип файла: jpg capture_05062009_214720.jpg (15.7 Кб, 157 просмотров)
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 06.05.2009, 23:05   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. Вроде, теперь все верно:
Код:
#include <cstdlib>
#include <iostream>
#include <string>
#include <queue>

using namespace std;

int main()
{
    queue<string> myqueue;
    string st,k,p,f;
    int n,r;
    cout<<"Enter size of queue: ";
    cin>>n;
    for(int count=1, i=0;i<n;i++,count++)
    {
     cout<<count<<". ";
     cin>>st; //вписываем слова и кидаем их в очередь myqueue
     myqueue.push(st);
    }

    cout<<"Enter word which we must delete: ";
    cin>>f; //пишем слово которое мы хочем удалить из очереди

    queue<string> newqueue;
    bool flag = false;
   cout<<"------------\n";
    while(!myqueue.empty())
     {
      k = myqueue.front();
      myqueue.pop();
      if(k==f && !flag) { flag = true; continue; }
      newqueue.push(k);
     }

    myqueue = newqueue;
    cout<<"-------------\n";
    while(!myqueue.empty()) // ну это цыкл чисто для себя...(чтобы проверить как работает прога)
    {
     cout<<myqueue.front()<<endl;
     myqueue.pop();
    }

    system("PAUSE");
    return EXIT_SUCCESS;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.05.2009, 23:30   #5
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Спасибки огромное ))
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна программа-пользовательская для ПК желательно на С, простая,но работающая с сом-портом Alexa Фриланс 2 30.04.2009 16:50
STACK и QUEUE vo_sa Общие вопросы C/C++ 3 25.03.2009 11:45
Простая программа с циклом на с++ Olya90 Помощь студентам 3 23.03.2009 20:32
Программа с использованием STL. Где ошибка?! Jarik Общие вопросы C/C++ 1 04.03.2009 10:32
Простая программа Distr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.11.2007 08:27