2012-01-06 82 views
1

您好!我目前正在C++中进行文本冒险,并且可以使用一些帮助。字符串解析器文本冒险

我试图做的是让用户输入类似如下的命令:

  • “去厨房”
  • “门户开放与关键”

,使游戏作出相应的反应

我们的老师给了我们下面的代码(我已经修改过),并且我很难理解它究竟做了什么以及我如何使用它来制作游戏。我对其进行了修改,以便用户可以输入string s,并将string标记为动词,宾语,介词和宾语2。

但是我需要做的是以某种方式将输入与可用命令列表进行比较。这是我目前遇到的麻烦。我是编程新手,需要将其作为我学习的家庭作业。任何帮助将非常感激。

struct command { 
char* verb; 
char* object; 
char* preposition; 
char* object2; 
}; 

bool getTokens(char * acInput, 
      const char token_delimiter, 
      command * pTargetCommand) 
{ 
char * pCurToken; 

pCurToken = strtok (acInput, &token_delimiter); 
if (pCurToken == NULL) { 
    printf("Error: Found no verb"); 
    getchar(); 
    return 1; 
} 
pTargetCommand->verb = pCurToken; 

pCurToken = strtok (NULL, &token_delimiter); 
if (pCurToken == NULL) { 
    printf("Error: Found no object"); 
    getchar(); 
    return 1; 
} 
pTargetCommand->object = pCurToken; 

pCurToken = strtok (NULL, &token_delimiter); 
if (pCurToken != NULL) { 
    pTargetCommand->preposition = pCurToken; 

    pCurToken = strtok (NULL, &token_delimiter); 
    if (pCurToken == NULL) { 
     printf("Error: Found no second object for preposition"); 
     getchar(); 
     return 1; 
    } 

    pTargetCommand->object2 = pCurToken; 
} 

pCurToken = strtok (NULL, &token_delimiter); 
if (pCurToken != NULL) { 
    printf("Error: too many tokens."); 
    getchar(); 
    return 1; 
} 
} 



int _tmain(int argc, _TCHAR* argv[]) 
    { 
char acInput[256]; 
cin.getline (acInput,256); 
command myCommand = { NULL }; 
int RoomChoice = 0; 


printf ("Splitting string \"%s\" into tokens:\n", acInput); 
getTokens(acInput, *TOKEN_DELIMITER, &myCommand); 

printf ("Verb:  %s\n", myCommand.verb); 
printf ("object:  %s\n", myCommand.object); 
printf ("preposition: %s\n", myCommand.preposition); 
printf ("object2:  %s\n", myCommand.object2); 

getchar(); 

return 0; 
    } 
+2

你有什么试过?你有多远?你能显示你写的代码吗?即使它不编译,或者即使它只是伪代码。 – 2012-01-06 01:00:04

+1

C++标签是否正确?这看起来比C++更像C语言。我的意思不是迂腐 - 根据语言的不同,这些方法可能会有所不同。 – 2012-06-08 19:40:31

回答

2

没有给你太多的家庭作业的时候,你就需要以某种方式读取所有可用操作的列表在一个结构,然后比较针对结构。

作为提示,根据模式,可能是switch(){}语句或像数组这样的集合。

考虑 开关(myCommand.verb) 案例“走出去”:

在现实世界的应用程序,你会旋转了一个工厂的命令对象,然后调用其中的一个。然而,在这里,我会建议你通过控制语句思考。

+0

那么我该怎么做? – 2012-01-06 09:22:17

+3

StackOverflow上有一个关于不为他人做功课的策略,所以我不会给你示例代码。在你的教科书中查找一个switch()语句,这会向你显示一个解决方案。 – 2012-01-06 11:49:52

+0

我一定误解了你。目前我的游戏是一个大开关语句,但只能通过输入数字来控制它,如果我尝试使用char或string开关,它告诉我它必须是整数或整数表达式。 – 2012-01-06 12:48:53

0

你不能做串开关(因为你已经注意到,交换机只与常数工作)

做比较,你可以使用STRCMP,STRNCMP或字符串更好的是,使用String.compare。您应该可以通过Google搜索找到足够的关于他们的信息。