C ++在这种情况下如何使用strtok

时间:2012-07-24 06:38:29

标签: c++ linux

我正在尝试拆分以下内容,我需要通过函数strtok拆分它,我想获得值1.2597,请注意Down是一个可以改变的动态词。我理解在这种情况下我可以使用空格作为我的分隔符,并获得值[1]这是货币,但我该如何处理它。

CCY 1.2597下跌0.0021(0.16%)14:32 SGT [44]

3 个答案:

答案 0 :(得分:1)

这应该这样做:

char *first = strtok(string, ' ');
char *second = strtok(0, ' ');

如果您想将数字转换为floatdouble,您还可以使用sscanf

char tmp[5];
float number;
sscanf(string, "%s %f", tmp, &number);

或者只使用sscanf上的strtok数字标记。

答案 1 :(得分:1)

您可以使用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;

答案 2 :(得分:0)

对此函数的一系列调用将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"