首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何反向地将C++字符串从尾巴串到头?

如何反向地将C++字符串从尾巴串到头?
EN

Stack Overflow用户
提问于 2012-06-18 06:35:45
回答 3查看 7.9K关注 0票数 6

我想我需要一个反向版本的strtok,比如:

代码语言:javascript
复制
char* p = rstrtok(str, delimeters);

例如,使用"+_-“的标记集,依次获取'-''_''+'在字符串”hello+stack_over“中的位置。

我只关心语料表,和它们的位置,(而不是内容之间),所以我想boost::split_iterator在这里是不合适的。

我可以利用现有的实用程序功能吗?或者有什么解决办法来处理这种情况?

此外,由于我正在做C++,是否有任何方便的方法来避免这种旧的方式C?

(我搜索了“反向strtok”,但只是得到“堆栈过流”到“流过堆栈”的东西.)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-18 06:42:01

你可以用strpbrk做这件事

代码语言:javascript
复制
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 */
}
票数 3
EN

Stack Overflow用户

发布于 2012-06-18 06:40:39

您可以使用strrchr滚动您自己的。

如果使用C++样式std::string,则可以利用string::find_last_of

票数 8
EN

Stack Overflow用户

发布于 2012-07-04 17:24:30

在最基本的版本中,strtok相当简单-最多几百行。如果您搜索"strtok filetype:c“,您可以看到它是如何在各种库中实现的。

一个非常天真的解决方案是先反转字符串,然后执行strtok()。但是,这对长字符串是不好的,但是如果您需要性能,可以转到您自己的strtok()。

就像这样:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11077935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档