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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка с двоичным включением http://www.cyberforum.ru/cpp-beginners/thread982868.html
Продемонстрируйте в виде таблицы работу алгоритма сортировки с двоичным включением на массиве 15,4,10,8,6,9,16,1 по возрастанию. Помогите, как это будет выглядеть? Код программы не нужен, чисто...
C++ Дописать код о удаление строк и столбцов с матрицы Данная программа находит Мax элемент в данной матрицы и указывает строку и столбец его нахождения. Нужно дописать, чтобы получалась новая матрица путем удаления этой строки и столбца Max элемента.... http://www.cyberforum.ru/cpp-beginners/thread982864.html
C++ Как объединить два массива в один?
Вот к примеру есть два массива: int A={1,2,3,4}; int B={5,6,7,8}; Как создать третий массив С , в котором будут содержаться элементы массива А и В, но так , чтобы массив С был такой: int...
Доступ к области памяти из другого класса C++
Есть класс в котором создаётся область в памяти, как получить из другого класса доступ к этой облпсти в возможностью перезаписи? В примере много чего вырезано, но более ли мение ясно. class...
C++ Удаление строк из двумерного массива http://www.cyberforum.ru/cpp-beginners/thread982843.html
Вот мой код, но он удаляет только 1 строку, мне надо переделать его так чтобы я вводил числа A и B и удалялись строки от А до Б но размер массива не менялся и в конце дописывались нулевые строки ...
C++ Найти сумму ряда(сделать последний шаг) здраствуйте я учусь не на програмиста но нам задали 3 лабораторные работы по С++ и сказали разобратся самим и решить, на этом изучение закончилось (но лабы я еще не сделал) в третей лабе нужно... подробнее

Показать сообщение отдельно
Мозготрёп
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 43

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

20.10.2013, 21:07. Просмотров 1034. Ответов 23
Метки (Все метки)

Задача 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru