c ++更改要输入的空间

时间:2012-10-02 04:11:03

标签: c++ formatting space enter

我不知道这是否可行。

我的作业是将单词和短语翻译成C ++中的pig Latin。最快的方法是让用户在每个单词后点击输入,但是如果没有按Enter而不是空格键,这将导致输入连续短语。

your
text
would
be
entered
like
this

您的输出很容易:

youway exttay ouldway ebay enteredway ikelay histay

但仍然把信息放进去会很奇怪。

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

your text would be entered like this

这样每个单词都会从字符串中单独输入我的数组,用户只需要输入1次。

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  1. 从用户输入中读取一行文本(可能有多个单词)
  2. 将该行拆分为单词
  3. 将每个单词翻译成Pig Latin
  4. 用两者之间的空格打印出来的文字
  5. 不是根据“如何将这些键更改为其他内容”来考虑这一点,而是根据“我如何才能最好地处理用户期望键入的内容”来考虑它。如果用户希望在单词之间键入空格(有意义),那么设计程序以便它可以处理这种输入。

答案 1 :(得分:0)

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

如果您需要一些帮助来解析一次操作的单词,那么请尝试另一个question

答案 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);