2011-02-08 16 views

答えて

6

std::stringは、rfind()の方法を有する。最後に.が返されます。"100"という文字列を取得するには、単純なsubstr()です。

+0

を使用し、atoiを使用して文字列から整数を取得します。 –

+3

@Benoit Thierry:私はむしろ 'stoi'を実際に使うか、' lexical_cast'を使います。 –

+0

'strtol'を意味しましたか?これは 'atoi'の標準的な選択肢です。 – MSalters

3
const std::string s("7.8.9.1.5.1.100"); 
const size_t i = s.find_last_of("."); 
if(i != std::string::npos) 
{ 
    int a = boost::lexical_cast<int>(s.substr(i+1).c_str()); 
} 
+1

+1:新しいセパレータを簡単に追加できるように、ここで 'find_last_of'を' rfind'にするのが好きです。 'find_last_of("。、 - : ")' – GrahamS

1
C++ 0xの正規表現を使用して

(またはboost::regex)は"^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$"リテラル文字列から構築basic_regexに対するあなたの文字列を確認してください。キャプチャグループ$1が便利です。

1

更新された情報では、以下のコードがこのトリックを行う必要があります。

#include <iostream> 
#include <string> 
#include <algorithm> 
#include <cstdlib> 

int main(void) 
{ 
    std::string base("7.8.9.1.5.1."); 
    std::string check("7.8.9.1.5.1.100"); 
    if (std::equal(base.begin(), base.end(), check.begin()) && check.find('.', base.size()) == std::string::npos) 
    { 
    std::cout << "val:" << std::atoi(check.c_str() + base.size()) << std::endl; 
    } 
    return 0; 
} 

EDIT:より多くのドットが試合後にある、atoiはまだ解析されて.までの値を返されていた例をスキップするように更新。

+0

いいえ、そうではありません。チェックする文字列にさらに '.'がある可能性があります! – Benoit

+0

@Benoit:どうですか? OPはこれが最後のドットであると指定していませんでしたか? – Oystein

+0

彼は '7.8.9.1.5.1.'で始まり、最後のドットの後に来るものを得ることを確実にしたいと考えています。 '7.8.9.1.5.1.42.55b'のような入力は、質問によれば禁止されておらず、答えは"はい、それはfooで始まり、最後は '55b'です。 – Benoit