1

これが可能かどうかはわかりません。

C++ で単語や語句をピッグ ラテン語に翻訳する課題があります。これを行う最も速い方法は、ユーザーが各単語の後に Enter キーを押すようにすることですが、これでは、スペース バーの代わりに Enter キーを押さないと連続したフレーズを入力できなくなります。

your
text
would
be
entered
like
this

出力は簡単に次のようになります。

youway exttay ouldway ebay enteredway ikelay histay

しかし、それでも情報を入れるのは奇妙です。

代わりに、スペースバーをエンターキー (キャリッジリターン) として扱うようにプログラムを強制したいと思います。

your text would be entered like this

そうすれば、各単語が文字列とは別に配列に入力され、ユーザーは一度入力するだけで済みます。

4

3 に答える 3

2

次のようなことができます:

  1. ユーザー入力からテキスト行を読み取ります (複数の単語が含まれる場合があります)
  2. 行を単語に分割する
  3. 各単語を豚ラテン語に翻訳する
  4. 間にスペースを入れて単語を出力する

これを「これらのキーを別の意味に変更するにはどうすればよいか」という観点から考えるのではなく、「ユーザーが入力することを期待している内容をどのようにうまく処理できるか」という観点から考えてください。ユーザーが単語間にスペースを入力することを期待している場合 (理にかなっています)、そのような入力を処理できるようにプログラムを設計してください。

于 2012-10-02T04:12:59.877 に答える
0

ユーザー入力データを 1 行にすることができます。これは当然のことです。

一度に 1 つずつ操作するために単語を解析する際に助けが必要な場合は、この他の質問を試してください。

于 2012-10-02T04:59:13.257 に答える
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 に答える