2012-01-06 119 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搜索找到足夠的關於他們的信息。