我想我需要一个反向版本的strtok,例如:
char* p = rstrtok(str, delimeters);
例如,使用分隔符集合,在字符串“hello + stack_over-flow”中依次获取'-'
,'_'
和'+'
的位置 “+ _-”
我只关心 delimeters 及其位置,(不是之间的内容),所以我想boost::split_iterator
不合适。< / p>
我可以利用现有的实用功能吗?或任何解决这种情况的解决方案?
此外,由于我正在做C ++,有没有方便的方法来避免这种古老的时尚C?
(我搜索“反向strtok”,但只是“堆叠流过”到“流过堆栈”的东西......)
答案 0 :(得分:8)
您可以使用strrchr
滚动自己。
如果您使用C ++样式std::string
,则可以使用string::find_last_of
。
答案 1 :(得分:3)
您可以使用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 */
}
答案 2 :(得分:0)
一个非常天真的解决方案是首先反转字符串,然后执行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];
}
编辑:
巧合的是,我在昨天谷歌搜索的标签页中打开了Dobbs博士页面:http://www.drdobbs.com/conversations-al-go-rithms/184403801