我想我需要一个反向版本的strtok,比如:
char* p = rstrtok(str, delimeters);例如,使用"+_-“的标记集,依次获取'-'、'_'和'+'在字符串”hello+stack_over“中的位置。
我只关心语料表,和它们的位置,(而不是内容之间),所以我想boost::split_iterator在这里是不合适的。
我可以利用现有的实用程序功能吗?或者有什么解决办法来处理这种情况?
此外,由于我正在做C++,是否有任何方便的方法来避免这种旧的方式C?
(我搜索了“反向strtok”,但只是得到“堆栈过流”到“流过堆栈”的东西.)
发布于 2012-06-18 06:42:01
你可以用strpbrk做这件事
char string[] = "hello+stack_over-flow";
char *pos = string;
while (*pos != '\0' && (pos = strpbrk(pos, "+-_")) != NULL)
{
/* Do something with `pos` */
pos++; /* To skip over the found character */
}发布于 2012-06-18 06:40:39
您可以使用strrchr滚动您自己的。
如果使用C++样式std::string,则可以利用string::find_last_of。
发布于 2012-07-04 17:24:30
在最基本的版本中,strtok相当简单-最多几百行。如果您搜索"strtok filetype:c“,您可以看到它是如何在各种库中实现的。
一个非常天真的解决方案是先反转字符串,然后执行strtok()。但是,这对长字符串是不好的,但是如果您需要性能,可以转到您自己的strtok()。
就像这样:
void reverse(char* dest, const char* src)
{
int len = strlen(src);
int i;
for(i = 0; i < len; ++i)
dest[len-i-1] = src[i];
}编辑:
巧合的是,昨天我在google搜索中打开了这个Dobbs博士页面:http://www.drdobbs.com/conversations-al-go-rithms/184403801。
https://stackoverflow.com/questions/11077935
复制相似问题