0

私の目的は、ユーザーから指示を受け取り、最終的にはテキスト ファイルからロボットを動かすことです。問題は、std::string ではなく Cstring (char word[]; など) を使用し、それらをトークン化して使用する必要があることです。

コードは次のようになります。

void Navigator::manualDrive()
{

    char uinput[1];
    char delim[] = " ";
    char *token;

    cout << "Enter your directions below: \n";
    cin.ignore();
    cin.getline (uinput, 256);

    token=strtok(uinput, delim);

    if(token == "forward")
    {
        int inches;
        inches=token+1;
        travel(inches);
    }
}

これまでトークン化したことがない Cstring を使用したことがなく、これを記述する方法もわかりません。私たちの TA は、私たちがこれらの方法を教えられたことがないことを知っているので、私たちがググってすべての答えを見つけることを期待しています。私の研究室の誰もが、いつもよりずっと多くの問題を抱えています。

書くコードはわかりませんが、プログラムに何をさせたいかはわかっています。
次のように実行したい:

1) 道を尋ねる。
2) ユーザーが入力
した cin.getline 3) 入力された文字列をトークン化する
4) 最初の単語 token == "forward" の場合は、次のトークンに移動し、何インチ前に移動するかを調べてから、次に移動します
5) そうでない場合は、最初のトークン== "turn" 次のトークンに移動します。次のトークン == "左" の場合、次のトークンに移動し、左に何度曲がるかを調べます

前方 x、後方 x、左折 x、右折 x、停止 (x はインチまたは度) に対してこれを行う必要があります。ロボットに 1 インチ前進し、度単位で回転する方法を指示する関数を既に作成しました。入力された文字列をすべて小文字に変換し、トークンからトークンに移動し、文字列から数値を変換または抽出して整数として使用する方法を知る必要があるだけです。

すべてが明確でない場合は、このリンクで私のラボの記事を読むことができます: http://www.cs.utk.edu/~cs102/robot_labs/Lab9.html
何か不明な点がある場合はお知らせください。私ができる最善のこと。

4

4 に答える 4

0

CString については何も言えませんが、コードにスタック オーバーフロー エラーが見つかりました。

{
    char uinput[1]; // <- ここでは、スタック上に 1 バイトの大きなバッファを定義します
    char delim[] = " ";
    char *トークン;

    cout << "以下に道順を入力してください: \n";
    cin.ignore();
    cin.getline(uinput、256); // そしてここに最大 256 バイトを入れます

私はお勧めします:

{
    const int bufSize = 42; // 42 はすべての awnser であるため
    char uinput[bufSize];
    // ...
    cin.getline(uinput, bufSize);
于 2010-04-10T19:43:02.270 に答える
0
  1. 下位に変換するには、tolowerを使用できます。一度に 1 文字ずつ操作するため、単純なループが必要です。
  2. 文字列を整数に解析するには、strtollを使用できます。
  3. 次のトークンに移動するということは、strtokを再度呼び出すことを意味します (この場合は if ステートメント内)。
于 2010-04-10T18:57:35.810 に答える
0

文字列を小文字に変換するには、tolower(). tolower単一の文字で機能するため、文字列をループしてすべての文字に適用する必要があります。

文字列を数値に変換するにはstrtol、 、strtoul、またはその他の関連関数を使用します。

于 2010-04-10T18:58:30.330 に答える
0

strtok をもう一度呼び出して、次のトークンを取得するだけです。

おそらく有効な入力チェックが必要になるでしょう。つまり、次の値があることを確認してください

通常、while ループを使用します。

token=strtok(uinput, delim);
while (token != NULL)
{
   // use token

  //go to next token
   token=strtok(uinput, delim);
}
于 2010-04-10T18:59:42.370 に答える