我有這樣的需求:我有一個像「-myArg:ArgVal」的字符串。解析C++中的C++字符串
std::string strArg = "-myArg:ArgVal";
現在,我要檢查在上面的字符串第一個字符總是「 - 」,如果第一個字符是「 - 」我應該刪除它,我應該存儲「myArg」和「ArgVal」在兩個不同的字符串對象。
我該如何有效地做到這一點?
我有這樣的需求:我有一個像「-myArg:ArgVal」的字符串。解析C++中的C++字符串
std::string strArg = "-myArg:ArgVal";
現在,我要檢查在上面的字符串第一個字符總是「 - 」,如果第一個字符是「 - 」我應該刪除它,我應該存儲「myArg」和「ArgVal」在兩個不同的字符串對象。
我該如何有效地做到這一點?
試試這個
if (strArg[0] == '-') {
strVar1 = strArg.substr(1, strArg.find(':') - 1);
strVar2 = strArg.substr(strArg.find(':') + 1);
}
當然,我假設,如果字符串與'-'
開始,然後會出現在它':'
與之前和之後的字符。你應該檢查一下,因爲如果沒有它可能會導致錯誤
添加一個空字符串檢查,strArg [0]不保證工作 – ognian 2011-03-29 13:39:31
看看std::string::substr()
和std::string::find()
。
最具擴展性和可靠性的方法是通過regular expressions。推薦的庫是Boost.Regex
std :: string具有您需要的功能。您可以使用string::at
檢查第一個字符,並使用string::substr
創建子字符串。擦除單個字符的工作方式與此相同。
查看c++ reference瞭解更多信息。
爲什麼你會爲這樣的事情擔心「效率」?你多久需要這樣做?它看起來像一個命令行參數,這往往意味着解析很少發生。 – unwind 2011-03-29 13:36:40
@unwind:效率可以通過代碼行數或程序員分鐘數以及CPU時間來衡量。 – 2011-03-29 13:38:43
在這種情況下更好地清晰。初始化代碼可能相當低效,因爲它只運行一次。只有對運行時間最長的東西進行優化,在你到達正確運行程序並通過所有測試的時刻,你甚至不用擔心。 – 2011-03-29 13:40:36