2017-10-10 69 views
2

我正在使用命令行界面。 用戶輸入一個命令,如無法使用C++在同一個字符串上多次使用string.substr(x,y)?

這將增加一個「歌」與-s標誌

add -s TITLE ARTIST 

這將有-a標誌

add -a TITLE ARTIST 

有添加「專輯」不同的標誌和不同的命令,如刪除以及。

我已經這樣做來評估命令和標誌,但是我無法獲取字符串的其餘部分。用戶輸入作爲一個字符數組,被轉換成一個字符串。

if (inputString.substr(0, 3) == "add"){ 
    if (inputString.substr(4, 5) == "-s"){ 
     cout << "TEST: ADD SONGS" << endl; 
     //PROBLEM IS THIS LINE 
     cout << inputString.substr(6, MAX_LENGTH) << endl; 
    } 

每當我得到命令+動作的標誌,我想運行使用字符串的其餘部分實際添加信息到數據庫中的新功能。

當我輸入add -s時沒有問題該程序知道我想添加一首歌曲來評估第一個字符。然而,如果我輸入更多,如「add -s "Sorry" "Justin Bieber"該程序甚至不承認,添加-s標誌運行。

有人可以解釋爲什麼這是,我怎麼可以改變它?暫時停留一段時間。

+0

作爲一個說明,自己做這件事將會是一個受到傷害的整個世界。你有沒有考慮過使用像[Getopt]這樣的庫(https://en.wikipedia.org/wiki/Getopt)?它在C中幾乎是通用的。 – tadman

+0

你可以用[mcve]改善你的問題。你在調試器中觀察到了什麼? – Tas

+0

我會考慮使用字符串拆分算法:https://stackoverflow.com/questions/236129/most-elegant-way-to-split-a-string – Galik

回答

1
if (inputString.substr(4, 5) == "-s"){ 

substr()第二個參數是字符計數。這提取(最多)從字符串5個字符,起始於偏移4.

但是如果我更多諸如「輸入add -s「Sorry」「Justin

好的,所以用我的手指計數來抵消4,即的確是' - '字符。然後,提取從該位置開始的五個字符到達以下字符串:

-s "S 

我將其計爲五個字符。這就是substr()的回報。將它與字符串「-s」進行比較顯然失敗。

您應該將此作爲學習一些調試技巧的便利機會。假如你加入這樣的事情:

std::cout << inputString.substr(4, 5) << std::endl; 

右邊第二個if語句之前,我相信你會一直都自己想通了這一點。

+0

謝謝,我不知道爲什麼我總是認爲第二個substr的參數是第二個位置。 – user1692517

相關問題