0

我的目标是从用户那里得到指示,最终得到一个文本文件来移动机器人。问题是我必须使用 Cstrings(例如 char word[];) 而不是 std::string 并将它们标记化以供使用。

代码如下所示:

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);
    }
}

我从来没有使用过 Cstrings 我从来没有标记过任何东西,而且我不知道如何写这个。我们的助教希望我们通过谷歌搜索并找到所有答案,因为他们知道我们从未学过这些方法。我实验室里的每个人都比平时遇到了更多的麻烦。

我不知道要写的代码,但我知道我想让我的程序做什么。
我希望它像这样执行:

1)问路。
2) cin.getline 用户输入
3) 标记输入的字符串
4) 如果第一个单词 token == "forward" 移动到下一个标记并找出向前移动多少英寸然后向前移动
5) 否则如果第一个标记== "转" 移动到下一个标记。if the next token == "left" 移动到下一个标记并找出左转的度数

我必须为前进 x、后退 x、左转 x、右转 x 和停止(其中 x 以英寸或度为单位)执行此操作。我已经编写了一些函数来告诉机器人如何向前移动一英寸并以度数为单位。我只需要知道如何将输入的字符串转换为所有小写字母并从标记移动到标记并从字符串中转换或提取数字以将它们用作整数。

如果一切都不清楚,你可以阅读我的实验室在这个链接上写的:http
://www.cs.utk.edu/~cs102/robot_labs/Lab9.html 如果有什么不清楚的地方请告诉我,我会澄清尽我所能。

4

4 回答 4

0
  1. 要转换为更低,您可以使用tolower。它一次操作一个字符,因此您需要一个简单的循环。
  2. 要将字符串解析为整数,可以使用strtoll
  3. 移动到下一个标记只是意味着再次调用strtok(在这种情况下是在 if 语句中)。
于 2010-04-10T18:57:35.810 回答
0

要将字符串转换为小写,您可以使用tolower(). tolower适用于单个字符,因此您必须遍历字符串并将其应用于每个字符。

要将字符串转换为数字,请使用strtolstrtoul或其他相关函数。

于 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 回答
0

虽然我不能说有关 CString 的内容,但我在您的代码中发现了堆栈溢出错误:

{
    字符输入[1];// <- 这里你在栈上定义一个一字节的大缓冲区
    字符分隔符 [] = " ";
    字符 * 令牌;

    cout << "在下面输入您的路线:\n";
    cin.ignore();
    cin.getline(uinput, 256); // 在这里你最多可以放入 256 个字节

我建议:

{
    常量 int bufSize = 42; // 因为 42 是所有东西的遮阳篷
    字符 uinput[bufSize];
    // ...
    cin.getline(uinput, bufSize);
于 2010-04-10T19:43:02.270 回答