以下を分割しようとしています。関数 strtok で分割する必要があり、値 1.2597 を取得したいのですが、Down は変更可能な動的な単語であることに注意してください。この場合、空白を区切り文字として使用して、通貨である値 [1] を取得できることは理解していますが、どうすればそれを使用できますか。
CCY 1.2597 ダウン 0.0021(0.16%) 14:32 SGT [44]
これはそれを行う必要があります:
char *first = strtok(string, ' ');
char *second = strtok(0, ' ');
float
数値をまたはに変換したい場合は、次をdouble
使用することもできますsscanf
。
char tmp[5];
float number;
sscanf(string, "%s %f", tmp, &number);
またはsscanf
、 で取得した数字トークンで使用しますstrtok
。
Boost.Regexを使用して、このタスクを簡単かつ安全に実行できます。
// use a regular expression to extract the value
std::string str("CCY 1.2597 Down 0.0021(0.16%) 14:32 SGT [44]");
boost::regex exp("CCY (\\d+\\.\\d+)");
boost::match_results<std::string::const_iterator> match;
boost::regex_search(str, match, exp);
std::string match_str(res[1].first, res[1].second)
// convert the match string to a float
float f = boost::lexical_cast<float>(match_str);
std::cout << f << std::endl;
この関数の一連の呼び出しにより、str がトークンに分割されます。トークンは、区切り記号の一部である任意の文字で区切られた連続した文字のシーケンスです。
例:
char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
result = strtok( NULL, delims );
}
出力:
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country"