2016-03-05 37 views
-2

我有一個字符串是這樣的:拆分C++字符串轉換成兩個整數,其通過分隔「:」

string str = "18:10"; 

18是分10是秒。 我需要分割字符串str並將它們存儲到兩個int變量中。 基本如此:int a = 18,int b = 10。我怎麼做?

+0

[檢查這一個](http://stackoverflow.com/a/236803/6021126),然後使用std :: stoi。 –

+0

你嘗試過什麼嗎?看起來你只是想讓社區爲你做這份工作。 –

+0

同意@MokonaModoki。你應該至少嘗試一次。 –

回答

3

有幾種方法可以做到這一點,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實用程序。

+0

我不知道爲什麼你有模板?這可以適用於其他類型,例如'float'和'double'嗎? – smttsp

+0

謝謝,它工作! – JY078

+0

@smttsp我相信是這樣,看着http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/,_「從流中順序提取並解析字符,將它們解釋爲正確類型的值,它被存儲爲val的值....「_。如我錯了請糾正我。 –

1

試試看看這個代碼。

#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:」或「:」),則必須進行錯誤處理。

+0

您不必擔心錯誤處理,所有字符串都有分鐘和秒 – JY078

相關問題