Форум программистов, компьютерный форум CyberForum.ru

getline vs посимвольный ввод - C++

Восстановить пароль Регистрация
 
 
Мозготрёп
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 43
20.10.2013, 21:07     getline vs посимвольный ввод #1
Задача http://acm.timus.ru/problem.aspx?space=1&num=1446 (тимус)
Кликните здесь для просмотра всего текста
1446. Волшебная шляпа
Ограничение времени: 1.0 секунды
Ограничение памяти: 64 МБ
В начале каждого учебного года в Хогвартсе происходит исключительно важное событие — распределение юных колдунов по факультетам. Находчивые и изобретательные попадают в Слизерин, отважные — в Гриффиндор, трудолюбивые — в Хаффлпаф, а сообразительные — в Рэйвенкло. Распределение проходит следующим образом: когда называется фамилия очередного первокурсника, он выходит в центр зала и надевает знаменитую шляпу Гриффиндора. Шляпа, оценив обстановку в голове колдуна или ведьмы, громко выкрикивает факультет. Специальный эльф ведет протокол распределения. После распределения ему надо срочно составить список учеников по факультетам. Члены общества Против Угнетения Колдовских Народов-Изгоев предлагают вам помочь уставшему за много лет эльфу в этом нелегком деле.
Исходные данные
В первой стоке указано количество учеников-первогодников N (1 ≤ N ≤ 1000). В следующих 2N строках указаны их имена и факультеты, которые назвала шляпа. Имя ученика может содержать прописные и заглавные буквы латинского алфавита, пробелы и знак дефиса. Длина каждого имени не больше 200 символов.
Результат
Выведите список учеников по факультетам: сначала название факультета, потом двоеточие, в следующих сроках список учеников по одному в строке. Первым должен идти список Слизерина, потом — Хаффлпаф, Гриффиндор, и Рэйвенкло. Между списками факультетов надо оставлять пустую строку. Ученики в списках по факультетам должны идти в том же порядке, в котором их вызывали на примерку шляпы. Известно, что каждый год на каждый факультет попадает по крайней мере один ученик.


Этот вариант кода работает бесконечно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main() {
    vector<string> Slytherin, Hufflepuff, Gryffindor, Ravenclaw;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        string s, s1;
        char c;
        cin >> c;
        while (c!='\n')
        {
            s+=c;
            cin >> c;
        }
        cin >> s1;
    //  cout << s << endl << s1 << endl;
        if (s1 == "Slytherin") Slytherin.push_back(s);
        else if (s1 =="Hufflepuff") Hufflepuff.push_back(s);
        else if (s1 =="Gryffindor") Gryffindor.push_back(s);
        else if (s1 =="Ravenclaw") Ravenclaw.push_back(s);
    }
    if (Slytherin.size()>0)
    {
        cout << "Slytherin:" << endl;
        for (int i = 0; i < Slytherin.size(); i++)
            cout << Slytherin[i] << endl;
    }
    if (Hufflepuff.size()>0)
    {
        cout<< endl << "Hufflepuff:" << endl;
        for (int i = 0; i < Hufflepuff.size(); i++)
            cout << Hufflepuff[i] << endl;
    }
    if (Gryffindor.size()>0)
    {
        cout<< endl << "Gryffindor:" << endl;
        for (int i = 0; i < Gryffindor.size(); i++)
            cout << Gryffindor[i] << endl;
    }
    if (Ravenclaw.size()>0)
    {
        cout<< endl << "Ravenclaw:" << endl;
        for (int i = 0; i < Ravenclaw.size(); i++)
            cout << Ravenclaw[i] << endl;
    }
    return 0;
}
Если сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main() {
    vector<string> Slytherin, Hufflepuff, Gryffindor, Ravenclaw;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        string s, s1;
                getline (cin, s);
        cin >> s1;
    //  cout << s << endl << s1 << endl;
        if (s1 == "Slytherin") Slytherin.push_back(s);
        else if (s1 =="Hufflepuff") Hufflepuff.push_back(s);
        else if (s1 =="Gryffindor") Gryffindor.push_back(s);
        else if (s1 =="Ravenclaw") Ravenclaw.push_back(s);
    }
    if (Slytherin.size()>0)
    {
        cout << "Slytherin:" << endl;
        for (int i = 0; i < Slytherin.size(); i++)
            cout << Slytherin[i] << endl;
    }
    if (Hufflepuff.size()>0)
    {
        cout<< endl << "Hufflepuff:" << endl;
        for (int i = 0; i < Hufflepuff.size(); i++)
            cout << Hufflepuff[i] << endl;
    }
    if (Gryffindor.size()>0)
    {
        cout<< endl << "Gryffindor:" << endl;
        for (int i = 0; i < Gryffindor.size(); i++)
            cout << Gryffindor[i] << endl;
    }
    if (Ravenclaw.size()>0)
    {
        cout<< endl << "Ravenclaw:" << endl;
        for (int i = 0; i < Ravenclaw.size(); i++)
            cout << Ravenclaw[i] << endl;
    }
    return 0;
}
вводится какойто НЁХ. Как впрочем и с
C++
1
cin >> s; sin >> s1;
Кто-нибудь может подсказать проблему.

Добавлено через 7 минут
Формат ввода
Кликните здесь для просмотра всего текста
7
Ivan Ivanov
Gryffindor
Mac Go Nagolo
Hufflepuff
Zlobeus Zlei
Slytherin
Um Bridge
Slytherin
Tatiana Henrihovna Grotter
Ravenclaw
Garry Potnyj
Gryffindor
Herr Mionag-Ranger
Gryffindor

Вывода
Кликните здесь для просмотра всего текста
Slytherin:
Zlobeus Zlei
Um Bridge

Hufflepuff:
Mac Go Nagolo

Gryffindor:
Ivan Ivanov
Garry Potnyj
Herr Mionag-Ranger

Ravenclaw:
Tatiana Henrihovna Grotter
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 12:24     getline vs посимвольный ввод #21
Вот вам ещё скрин.
Миниатюры
getline vs посимвольный ввод  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 12:25     getline vs посимвольный ввод #22
Цитата Сообщение от BrainFuck Посмотреть сообщение
онлайн компиляторы!!!!
Нужно обязательно онлайн?
Мозготрёп
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 43
21.10.2013, 12:29  [ТС]     getline vs посимвольный ввод #23
я сижу не со своего компа: тут проблемы а) нет установленных компиляторов. б) студия не встаёт на ХР(которая стоит здесь) б.1) другие компиляторы не люблю в)задача пишется, чтобы сдать её на тимусе(система онлайн проверки задач)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 12:37     getline vs посимвольный ввод
Еще ссылки по теме:

Ввод данных в структуру - cin.getline C++
C++ Посимвольный файловый ввод
Функция getline пропускает ввод строки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2013, 12:37     getline vs посимвольный ввод #24
http://ideone.com/hIZxzf
Yandex
Объявления
21.10.2013, 12:37     getline vs посимвольный ввод
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru