форматирование — c ++ изменить пространство для ввода

Я не знаю, возможно ли это вообще.

У меня есть задание для перевода слов и фраз на латинский язык свиньи в C ++. самый быстрый способ сделать это — нажать клавишу ввода после каждого слова, но это сделает невозможным ввод непрерывной фразы без нажатия клавиши ввода вместо пробела.

your
text
would
be
entered
like
this

Ваш вывод может быть легко:

youway exttay ouldway ebay enteredway ikelay histay

Но все равно вводить информацию было бы странно.

Вместо этого я хотел бы заставить программу обрабатывать пробел, как если бы это была клавиша ввода (возврат каретки).

your text would be entered like this

Таким образом, каждое слово будет входить в мой массив отдельно от строки, пользователю нужно будет только нажать ввод 1 раз.

1

Решение

Вы могли бы сделать что-то вроде:

  1. Читать строку текста из пользовательского ввода (который может иметь несколько слов)
  2. Разбить строку на слова
  3. Переведите каждое слово на Pig Latin
  4. Распечатать слова с пробелами между ними

Вместо того, чтобы думать об этом с точки зрения «как я могу изменить эти ключи, чтобы они означали что-то другое», подумайте об этом с точки зрения «как я могу лучше всего работать с тем, что пользователь ожидает ввести». Если пользователь ожидает ввода пробелов между словами (имеет смысл), разработайте свою программу так, чтобы она могла обрабатывать ввод такого рода.

2

Другие решения

Пользователь может вводить данные в виде одной строки, поскольку это кажется естественным.

Если вам нужна помощь в разборе слов для работы с одним из них, попробуйте этот другой вопрос.

0

Вот дешевый способ сделать это:

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);
0
По вопросам рекламы [email protected]