【问题标题】:c++ change space to enterc++改变空间进入
【发布时间】:2012-09-22 23:02:30
【问题描述】:

我不知道这是否可能。

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

your
text
would
be
entered
like
this

你的输出很容易是:

youway exttay ouldway ebay enteredway ikelay histay

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

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

your text would be entered like this

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

【问题讨论】:

  • 你从根本上问错了问题。对于“如何将一堆由空格分隔的单词读入数组”的问题,您将得到更简单的答案。

标签: c++ formatting space enter


【解决方案1】:

你可以这样做:

  1. 从用户输入中读取一行文本(可能有多个单词)
  2. 将行拆分为单词
  3. 将每个单词翻译成 Pig Latin
  4. 将单词打印出来,并在它们之间添加空格

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这是一种便宜的方法:

      std::string in;
      while (std::cin >> in)
        std::cout << piglatin(in) << char(std::cin.get());
      

      std::cin &gt;&gt; in 跳过输入流中的任何前导空格,然后用输入流中的下一个以空格结尾的单词填充in,将空格结尾留在输入流中。 char(std::cin.get()) 然后提取该终止符(可能是空格或换行符)。 while 循环由文件结尾终止。

      只要你理解它,你就可以使用它。

      添加:

      这里有一个更好的方法来确定读取的单词是以空格还是换行符结尾的:

      #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';
      }
      

      现在 hack 看起来像这样:

      std::string in;
      while (std::cin >> in)
        std::cout << piglatin(in) << look_for_nl(std::cin);
      

      【讨论】:

      • 我有点理解,感谢您不像其他人那样讽刺,非常感谢。你能用它一次在一个数组中输入一个单词吗?
      • 你可以用你读到的单词做任何你喜欢的事情 :) 棘手的部分是识别行尾,我的小技巧做得有点不完美(它假设用户从不输入空格只是在点击进入之前)。它演示了 格式化 输入(例如 cin >> s)和未格式化输入(cin.get())之间的区别。格式化输入会在读取内容之前跳过空格,并在遇到空格(将其放回输入流)时停止读取。未格式化的输入只会为您提供那里的内容。所以在 cin>>s 之后,你要么有空格,要么有一个 eof 等着你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2017-10-05
      • 2012-08-07
      • 1970-01-01
      • 2015-11-17
      • 2016-07-30
      相关资源
      最近更新 更多