似乎這個(gè)問(wèn)題很微妙,我遇到了一些挑戰(zhàn)來(lái)解決它。我有一個(gè)格式特殊的STL字符串,如"2013 336(02 DEC) 04",其中小時(shí)部分(在這個(gè)例子中是"04")并不關(guān)鍵。我的目標(biāo)是提取日期(在這個(gè)例子中是"02")和月份以及小時(shí)部分。
我一直在嘗試以一種優(yōu)雅的方式解決這個(gè)問(wèn)題,避免使用括號(hào)分割字符串或使用子字符串等方法。理想情況下,我想使用stringstream,并將其重定向到變量。這是我目前的代碼:
```cpp
int year, dayOfYear, day;
std::string month, leftParenthesis, rightParenthesis;
std::string ExampleString = "2013 336(02 DEC) 04";
std::istringstream yearDayMonthHourStringStream(ExampleString);
yearDayMonthHourStringStream >> year >> dayOfYear >> leftParenthesis >> day >> month >> rightParenthesis >> hour;
```
這樣,`year`和`dayOfYear`被解析為"2013"和"336",然后就遇到了問(wèn)題。變量`day`的值變?yōu)?0",`month`的值變?yōu)榭兆址鴃hour`的值變成了非常大的數(shù)字"843076624"。雖然我已經(jīng)能夠從`leftParenthesis`變量中提取出"(02",但是當(dāng)我嘗試省略這個(gè)變量時(shí),發(fā)現(xiàn)無(wú)論如何都無(wú)法正確提取`day`的值。
關(guān)于如何處理這個(gè)問(wèn)題的想法?雖然我現(xiàn)在還不熟悉正則表達(dá)式,但我認(rèn)為這可能是解決這個(gè)問(wèn)題的一個(gè)好方法。盡管這是第十次嘗試使用正則表達(dá)式使我的生活變得更輕松,但現(xiàn)在我覺(jué)得是時(shí)候?qū)W習(xí)它了。無(wú)論如何,我已經(jīng)找到了一個(gè)可行的方法:
我增加了幾個(gè)變量來(lái)處理這個(gè)問(wèn)題,例如`dayString`和`monthString`。然后,我使用stringstream來(lái)提取各個(gè)部分的值。對(duì)于日期部分,我使用了C++11標(biāo)準(zhǔn)中的`std::stod()`函數(shù)將其轉(zhuǎn)換為數(shù)字,并忽略了可能存在的"("字符。對(duì)于月份部分,我仍然需要將其轉(zhuǎn)換為數(shù)字,但這并不是一個(gè)很大的問(wèn)題。這并不是我能做的最好的事情(使用正則表達(dá)式可能會(huì)更好),但它可以工作,并且不太混亂。我希望這不會(huì)與新的編譯器產(chǎn)生沖突。感謝大家的幫助!
另外補(bǔ)充一些知識(shí),關(guān)于變量命名和C++的某些特性等:在編程中,變量是代表可變狀態(tài)并能夠存儲(chǔ)數(shù)據(jù)的抽象概念。在某些編程語(yǔ)言中(如Java和Visual Basic),變量可能被明確地定義為這樣的抽象概念。在C++中,變量名需要遵循一定的規(guī)則,例如必須以字母或漢字開(kāi)頭,后面可以是字母、漢字、數(shù)字和下劃線,且不能使用保留字等。C++還提供了算術(shù)運(yùn)算符和匿名函數(shù)等特性,"?"運(yùn)算符是一個(gè)條件運(yùn)算符,"++"(自增)和"--"(自減)運(yùn)算符是非常方便且高效的兩個(gè)一元運(yùn)算符。在使用算術(shù)運(yùn)算符時(shí)需要注意一些細(xì)節(jié)和特性。更多信息可以查閱相關(guān)文獻(xiàn)或參考資料了解C++的其他特性。