文字列から数値を読み取ろうとしています。 スペースのない文字列から整数を読み取る
string str = "1Hi15This10";
場合、私は、私は、インデックスでみましたが、私は、文字列ではないので、私はgetline
を使用することができなかった1と10と0ではない10 を読む(1,15,10)
を取得したいです何かで区切られている。
アイデア?
文字列から数値を読み取ろうとしています。 スペースのない文字列から整数を読み取る
string str = "1Hi15This10";
場合、私は、私は、インデックスでみましたが、私は、文字列ではないので、私はgetline
を使用することができなかった1と10と0ではない10 を読む(1,15,10)
を取得したいです何かで区切られている。
アイデア?
は、正規表現せずに、あなたはこの
std::string str = "1Hi15This10";
for (char *c = &str[0]; *c; ++c)
if (!std::isdigit(*c) && *c != '-' && *c != '+') *c = ' ';
整数が今の最善の方法は、正規表現を使用することです私見
'!std :: isdigit(* c)'も使うことができます。これは非文字にも対応します。また、記号文字( '+'または '-')の存在を許すために、このアプローチを適応させる必要があるかもしれません。 – Peter
これは潜在的に未定義の動作を呼び出します。 [詳細](https://stackoverflow.com/questions/21805674/do-i-need-to-cast-to-unsigned-char-before-calling-toupper) –
を解析するために簡単ですスペース区切り文字で区切られ行うことができます。
#include <iostream>
#include <iterator>
#include <string>
#include <regex>
int main() {
std::string s = "1Hi15This10";
std::regex number("(\\d+)"); // -- match any group of one or more digits
auto begin = std::sregex_iterator(s.begin(), s.end(), number);
// iterate over all valid matches
for (auto i = begin; i != std::sregex_iterator(); ++i) {
std::cout << " " << i->str() << '\n';
// and additional processing, e.g. parse to int using std::stoi() etc.
}
}
出力:
1
15
10
はい、あなたはこのために、独自のループを書くことができますが、:
これはあなたを助けるかもしれません:http://stackoverflow.com/questions/17331250/read-all-integers -from-string-c –
正規表現を使用してマッチングに精通していますか? '/(\ d +)/ g'のようなものを使って、文字列内の整数のグループをマッチングさせ、グループとして返された文字列のint自体を解析することができます。 – orphen