我有一個字符串是這樣的:拆分C++字符串轉換成兩個整數,其通過分隔「:」
string str = "18:10";
18是分10是秒。 我需要分割字符串str並將它們存儲到兩個int變量中。 基本如此:int a = 18,int b = 10。我怎麼做?
我有一個字符串是這樣的:拆分C++字符串轉換成兩個整數,其通過分隔「:」
string str = "18:10";
18是分10是秒。 我需要分割字符串str並將它們存儲到兩個int變量中。 基本如此:int a = 18,int b = 10。我怎麼做?
有幾種方法可以做到這一點,C風格(atoi
,atof
等)。在C++中,我們使用頭sstream
中的std::stringstream
。
#include <iostream>
#include <sstream>
template <typename T>
T convertString(std::string str) {
T ret;
std::stringstream ss(str);
ss >> ret;
return ret;
}
int main() {
std::string str = "18:10";
int minutes,seconds;
minutes = convertString<int>(str.substr(0,2));
seconds = convertString<int>(str.substr(3,4));
std::cout<<minutes<<" "<<seconds<<"\n";
}
輸出:
18 10
這當然,假設您的字符串遵循此格式完全相同(相同數量的整數,用冒號分隔的..)。如果您需要在更廣泛的背景下使用它,也許您會有興趣使用std::regex
實用程序。
試試看看這個代碼。
#include <string>
#include <sstream>
template <class NumberType, class CharType>
NumberType StringToNumber(const std::basic_string<CharType> & String)
{
std::basic_istringstream<CharType> Stream(String);
NumberType Number;
Stream >> Number;
return Number;
}
const std::string str("18:10");
const size_t Pos = str.find(':');
const auto Hour = StringToNumber<int>(str.substr(0, Pos));
const auto Minute = StringToNumber<int>(str.substr(Pos + 1, std::string::npos));
我沒有測試它。如果有任何錯誤,請修復它。如果您的字符串可能有幾小時或幾分鐘的空白部分(例如:「:10」,「18:」或「:」),則必須進行錯誤處理。
您不必擔心錯誤處理,所有字符串都有分鐘和秒 – JY078
[檢查這一個](http://stackoverflow.com/a/236803/6021126),然後使用std :: stoi。 –
你嘗試過什麼嗎?看起來你只是想讓社區爲你做這份工作。 –
同意@MokonaModoki。你應該至少嘗試一次。 –