template < typename T >
T valueFromString( const std::string &src )
{
std::stringstream s( src );
T result = T();
s >> result;
return result;
}
std::string wordByNumber( const std::string &src, size_t n, const std::string &delims )
{
std::string::size_type word_begin = 0;
for ( size_t i = 0; i < n; ++i )
{
word_begin = src.find_first_of( delims, word_begin );
}
std::string::size_type word_end = src.find_first_of( delims, word_begin );
word_begin = std::string::npos == word_begin || word_begin == src.length() ? 0 : word_begin + 1;
word_end = std::string::npos == word_end ? src.length() : word_end;
return src.substr( word_begin, word_end - word_begin);
}
char *a = "asdfsd:5.2";
std::cout << wordByNumber( a, 0, ":" ) << ", " << valueFromString< double > ( wordByNumber( a, 1, ":" ) );
PS: в предыдущей ревизии я публиковал wordByNumber - пропускал соседние разделители (например, :: :), в текущей ревизии они рассматриваются как пустое слово.