"7.8.9.1.5.1.100"のようなC++文字列で最後のドットの最後の数字を抽出して保存する必要があります整数??"7.8.9.1.5.1.100"のような文字列の後に最後の数字を抽出する必要があります
追加: この文字列は、「7.8.9.1.5.1.1」または「7.8.9.1.5.1.0」でもかまいません。
また、最後のドットの前に正確に "7.8.9.1.5.1"であることを検証したいと思います。
"7.8.9.1.5.1.100"のようなC++文字列で最後のドットの最後の数字を抽出して保存する必要があります整数??"7.8.9.1.5.1.100"のような文字列の後に最後の数字を抽出する必要があります
追加: この文字列は、「7.8.9.1.5.1.1」または「7.8.9.1.5.1.0」でもかまいません。
また、最後のドットの前に正確に "7.8.9.1.5.1"であることを検証したいと思います。
std::string
は、rfind()
の方法を有する。最後に.
が返されます。"100"
という文字列を取得するには、単純なsubstr()
です。
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:新しいセパレータを簡単に追加できるように、ここで 'find_last_of'を' rfind'にするのが好きです。 'find_last_of("。、 - : ")' – GrahamS
(またはboost::regex
)は"^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$"
リテラル文字列から構築basic_regex
に対するあなたの文字列を確認してください。キャプチャグループ$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
はまだ解析されて.
までの値を返されていた例をスキップするように更新。
を使用し、atoiを使用して文字列から整数を取得します。 –
@Benoit Thierry:私はむしろ 'stoi'を実際に使うか、' lexical_cast'を使います。 –
'strtol'を意味しましたか?これは 'atoi'の標準的な選択肢です。 – MSalters