V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsds
V2EX  ›  程序员

c++不用 boost 库,怎么切割字符串?

  •  
  •   wsds · 2018-08-08 19:21:24 +08:00 · 3463 次点击
    这是一个创建于 2297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不用 boost 库,最简单的方式, 怎么拿到 test123

    test/test123
    
    26 条回复    2018-08-09 14:02:59 +08:00
    winterfell30
        1
    winterfell30  
       2018-08-08 19:25:36 +08:00
    str.substr(str.rfind('/'))?
    MeteorCat
        2
    MeteorCat  
       2018-08-08 19:25:42 +08:00 via Android
    ........tinyhttp 在 http 解析的时候有针对字符串截断,参考下用\0 截断
    agostop
        3
    agostop  
       2018-08-08 19:27:13 +08:00
    我想问下,现在做 C++开发的,是不是基本离不开 boost ?
    changnet
        4
    changnet  
       2018-08-08 19:27:48 +08:00 via Android
    看具体需求,我很多时候都是 for 循环去找
    wsds
        5
    wsds  
    OP
       2018-08-08 19:27:51 +08:00
    @winterfell30 有这么简单的方法 ?网上没查到过这个答案
    singer
        6
    singer  
       2018-08-08 19:28:45 +08:00 via iPhone
    STL 不行么?
    glacer
        7
    glacer  
       2018-08-08 19:34:14 +08:00
    自己实现 split 函数不就行了么,循环过一遍而已
    SPACELAN
        8
    SPACELAN  
       2018-08-08 19:36:30 +08:00
    emmm,写 c++的,从来不用 boost
    gnaggnoyil
        9
    gnaggnoyil  
       2018-08-08 21:00:50 +08:00   ❤️ 1
    range-v3 就有现成的`ranges::view::split`.不过你确定你这不是个 X-Y 问题?我觉得你可能更需要`ranges::view::tokenize`
    innoink
        10
    innoink  
       2018-08-08 21:04:58 +08:00 via Android
    你难道不去 cppreference.com 上看看 std::string 有哪些成员函数么?
    byteli
        11
    byteli  
       2018-08-08 21:20:30 +08:00 via Android
    string 这么蛋疼的东西还是用成熟的好,比如 qstring
    shilyx
        12
    shilyx  
       2018-08-08 21:27:59 +08:00
    @agostop 一般项目中能不引入 boost,则不引入
    一旦引入之后,就再无所顾忌
    tangxiaoqiang123
        13
    tangxiaoqiang123  
       2018-08-08 21:33:53 +08:00
    std::string split(char* str, const char* sep) {
    std::stringstream o;
    char* s = strtok(str, sep);
    while (s != NULL) {
    o << s;
    s = strtok(NULL, sep);
    }
    return o.str();
    }
    winterfell30
        14
    winterfell30  
       2018-08-08 21:34:34 +08:00
    @wsds 如果是像你举的那个例子这么简单这样就可以了,要完全实现 split 的功能还是自己写一个函数吧
    hanminghui
        15
    hanminghui  
       2018-08-08 21:37:50 +08:00
    常备 cppreference,学到了
    lolcat
        16
    lolcat  
       2018-08-08 21:43:49 +08:00
    #include <string.h>
    ....
    char *p=(strchr("test/test123",'/')+1);
    这应该是最简单的方法了吧?
    dosmlp
        17
    dosmlp  
       2018-08-08 21:49:43 +08:00
    自己写一个分割函数就完了,多大点事还发个帖子
    yanaraika
        18
    yanaraika  
       2018-08-08 22:55:58 +08:00
    range-v3 吧,header-only,比起 boost 小太多,无痛引入
    agagega
        19
    agagega  
       2018-08-08 23:02:36 +08:00
    <algorithm> 里面的 find
    agostop
        20
    agostop  
       2018-08-09 09:04:42 +08:00
    boost 是个可以让 C++变 java 的神奇之库吗?
    v2qwsdcv
        21
    v2qwsdcv  
       2018-08-09 09:51:38 +08:00
    araraloren
        22
    araraloren  
       2018-08-09 11:08:48 +08:00
    ~~ 推荐 strtok 的都是什么心态。。
    mingl0280
        23
    mingl0280  
       2018-08-09 12:50:04 +08:00
    string s("test/test123");
    int lastSlash = s.rfind('/');
    if (lastSlash != s::npos)
    string t = s.substr(lastSlash+1);

    t 就是结果。
    mingl0280
        24
    mingl0280  
       2018-08-09 12:50:52 +08:00
    @agostop 基本不用 boost 路过
    yazoox
        25
    yazoox  
       2018-08-09 12:59:36 +08:00
    也挺好奇的,现在 c++都用什么库?
    裸的 c++用起来,真的老费劲了......
    dychenyi
        26
    dychenyi  
       2018-08-09 14:02:59 +08:00
    23 是最简单的写法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:26 · PVG 04:26 · LAX 12:26 · JFK 15:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.