Есть один небольшой вопрос. У меня есть список с двумя полями данных (одно для буквы, а второе для числа). Он вводиться с клавиатуры. Пример: 11a33v55b. Но проблема в том, что ввод не прекращаться после нажатие enter. Нужно в конце ввести какой-нибудь / или . или любой знак не число и не буква. Тогда вызывается функция вывода. То-есть 11a33v55b/. А нужно чтобы 11a33v55b нажал enter и ввод закончился.
#include <iostream>
using namespace std;
struct A
{
int cyfra;
char symbol;
};
struct List
{
A a;
List* next;
};
List * get_AList_item() {
List *elem = new List;
if (cin >> elem->a.cyfra >> elem->a.symbol)
return elem;
return 0;
}
List *get_list() {
List *head = get_AList_item(),
*tail = head;
while ((tail->next = get_AList_item()))
tail = tail->next;
return head;
}
int main() {
// Получить заполненный список
List *list = get_list();
// поэлементно распечатать его
cout << "List:\n";
for (List *p = list; p; p = p->next)
cout << p->a.cyfra << p->a.symbol << ' ';
}
Как вариант, если ввод происходит строкой, как в вашем примере, то можете воспользоваться следующей конструкцией:
std::string str;
std::getline(std::cin, str);
А потом просто парсить вашу строку в список как вам угодно, хоть регулярку для нее написать)
Как уже указали в ответе, воспользуйтесь вводом строк и чтением элементов списка из потока (класс stringstream
), связанного с введенной строкой.
Для реализации таких изменений добавьте пару заголовочных файлов
#include <sstream>
#include <string>
и немного модифицируйте функции ввода
List * get_AList_item(stringstream &cin) {
// имя аргумента специально выбрано `cin`, оно "перебьет" стандартное значение,
// что позволит не менять код функции
// далее тот же код
....
}
В функцию get_list()
потребуется внести побольше изменений
List *get_list() {
string s;
getline(cin, s);
stringstream ss(s);
// далее единственное изменение кода, вызов `get_AList_item` с параметром
List *head = get_AList_item(ss),
*tail = head;
while ((tail->next = get_AList_item(ss)))
tail = tail->next;
return head;
}
Вот, собственно и все.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В массиве А(N,M) строки, не содержащие четных элементов, расположить в порядке убывания сумм элементов
Вот такой вопрос, почему каждый раз ,то что я ввожу заменяется новыми введенными данными? Выводится на консоль только новая информация
Я не могу понять в чем моя ошибкаДобавила "_s", не помогает