如果我想将它用作int,如何获取Cstring中的下一个标记? (C ++)

时间:2010-04-10 18:54:22

标签: c++ cstring tokenize

我的目标是从用户那里获取指示并最终获取文本文件以移动机器人。问题是我必须使用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我之前从未对任何东西进行过任何标记,而且我不知道如何写这个。我们的T.A.期望我们谷歌并找到所有的答案,因为他们知道我们从未接受过这些方法的教育。我实验室里的每个人都比往常更麻烦。

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

1)询问方向 2)cin.getline用户输入
3)将输入的字符串标记为
4)如果第一个单词token ==“forward”移动到下一个标记并找出向前移动多少英寸然后向前移动
5)否则如果第一个令牌==“转”移动到下一个令牌。如果下一个标记==“左”移动到下一个标记并找出向左转的程度

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

如果一切都不清楚,您可以通过以下链接阅读我的实验室:http://www.cs.utk.edu/~cs102/robot_labs/Lab9.html
如果有什么不清楚请告诉我,我会尽可能地澄清。

4 个答案:

答案 0 :(得分:0)

  1. 要转换为较低版本,您可以使用tolower。它一次只能操作一个字符,所以你需要一个简单的循环。
  2. 要将字符串解析为整数,可以使用strtoll
  3. 移动到下一个标记只是意味着再次调用strtok(在这种情况下,在if语句中)。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你只需再次调用strtok即可获得下一个令牌。

您可能需要有效的输入检查,即检查是否存在下一个值

通常你会使用while循环

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

  //go to next token
   token=strtok(uinput, delim);
}

答案 3 :(得分:0)

虽然我不能说CString,但我在你的代码中发现了一个堆栈溢出错误:

{
    char uinput[1]; // <- Here you define a one byte large buffer on the stack 
    char delim[] = " ";
    char *token;

    cout << "Enter your directions below: \n";
    cin.ignore();
    cin.getline(uinput, 256); // and here you put up to 256 bytes into it

我会说:

{
    const int bufSize = 42; // since 42 is the awnser to everything
    char uinput[bufSize];
    // ...
    cin.getline(uinput, bufSize);