1

我不知道这是否可能。

我有一个任务是用 C++ 将单词和短语翻译成猪拉丁语。最快的方法是让用户在每个单词后按回车键,但是如果不按回车键而不是空格键,这将导致无法输入连续的短语。

your
text
would
be
entered
like
this

您的输出很容易是:

youway exttay ouldway ebay enteredway ikelay histay

但是仍然将信息放入会很奇怪。

相反,我想强制程序将空格键视为回车键(回车)。

your text would be entered like this

这样,每个单词都会与字符串分开输入我的数组,用户只需按回车键 1 次。

4

3 回答 3

2

您可以执行以下操作:

  1. 从用户输入中读取一行文本(可能有多个单词)
  2. 将行拆分为单词
  3. 将每个单词翻译成猪拉丁语
  4. 打印单词,它们之间有空格

与其从“如何将这些键更改为其他含义”来考虑这一点,不如从“我如何才能最好地使用用户期望输入的内容”来考虑它。如果用户希望在单词之间输入空格(有意义),那么设计您的程序以便它可以处理这种输入。

于 2012-10-02T04:12:59.877 回答
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);
于 2012-10-02T05:46:51.847 回答
0

您可以将用户输入数据作为一行,因为这看起来很自然。

如果您在解析单词以一次操作一个单词时需要一些帮助,请尝试this other question

于 2012-10-02T04:59:13.257 回答