Я не знаю, возможно ли это вообще.
У меня есть задание для перевода слов и фраз на латинский язык свиньи в C ++. самый быстрый способ сделать это — нажать клавишу ввода после каждого слова, но это сделает невозможным ввод непрерывной фразы без нажатия клавиши ввода вместо пробела.
your
text
would
be
entered
like
this
Ваш вывод может быть легко:
youway exttay ouldway ebay enteredway ikelay histay
Но все равно вводить информацию было бы странно.
Вместо этого я хотел бы заставить программу обрабатывать пробел, как если бы это была клавиша ввода (возврат каретки).
your text would be entered like this
Таким образом, каждое слово будет входить в мой массив отдельно от строки, пользователю нужно будет только нажать ввод 1 раз.
Вы могли бы сделать что-то вроде:
Вместо того, чтобы думать об этом с точки зрения «как я могу изменить эти ключи, чтобы они означали что-то другое», подумайте об этом с точки зрения «как я могу лучше всего работать с тем, что пользователь ожидает ввести». Если пользователь ожидает ввода пробелов между словами (имеет смысл), разработайте свою программу так, чтобы она могла обрабатывать ввод такого рода.
Пользователь может вводить данные в виде одной строки, поскольку это кажется естественным.
Если вам нужна помощь в разборе слов для работы с одним из них, попробуйте этот другой вопрос.
Вот дешевый способ сделать это:
std::string in;
while (std::cin >> in)
std::cout << piglatin(in) << char(std::cin.get());
std::cin >> in
пропускает все начальные пробелы во входном потоке, а затем заполняет in
со следующим завершенным пробелом словом из входного потока, оставляя пробел во входном потоке. char(std::cin.get())
затем извлекает этот терминатор (который может быть пробелом или новой строкой). Цикл while завершается концом файла.
Вы можете использовать то, что понимаете.
Добавлено:
Вот лучший способ узнать, было ли слово read завершено пробелом или новой строкой:
#include <cctype>
char look_for_nl(std::istream& is) {
for (char d = is.get(); is; d = is.get()) {
if (d == '\n') return d;
if (!isspace(d)) {
is.putback(d);
return ' ';
}
}
// We got an eof and there was no NL character. We'll pretend we saw one
return '\n';
}
Теперь взлом выглядит так:
std::string in;
while (std::cin >> in)
std::cout << piglatin(in) << look_for_nl(std::cin);