zoukankan      html  css  js  c++  java
  • C/C++处理字符串

    1. strtok

      函数原型:char * strtok(char *str, const char * delim);

      注意点:

        两个入参必须为字符串数组;

        第一次调用要传str, delim,后面调用要传NULL, delim,传入其它的str后重新被初始化,内部是一个static的指针;

        与之相对的一个:strtok_r();

      典型逻辑:

    while(result = strtok(input, split))
    {
        input = NULL;
    
        if(i == 0)
        {
        }
    
        if(i == 1)
        {
        }
    
        i++;
    }

      处理空格:

    std:string name = "aaa     bbbb ccc  ";
    int fpos=0,epos=fpos;
    while((fpos=name.find_first_of(" ", epos)) != std::string::npos)
    {
        if(fpos != epos)
        {
             std::cout << name.substr(epos, fpos-epos) << std::endl;
        }
        epos = ++fpos;
        // break;
    }

    2. sprintf、sscanf

      函数原型:

        int sprintf(char *str, const char *format, ...);

        int sscanf(const char *str, const char *format);

      用于版本号、IP等的匹配,%后面的可以用正则表达式,灵活性较强,要处理简单字符串的时候可以考虑替代使用regex.h库。

    char buf[16]="10.150.88.34";
    char a[4]="192",b[4]="168",c[4]="0",d[4]="1";
    
    //sprintf(buf, "%s.%s.%s.%s", a,b,c,d);
    //printf("%s
    ", buf);
    
    sscanf(buf, "%[0-9].%[0-9].%[0-9].%[0-9]", a,b,c,d);
    printf("%s,%s,%s,%s
    ", a,b,c,d);

      更深入细致的介绍:

        参考  参考   可以使用更安全的stringstream,与getline连用:参考

        C语言字符匹配系统介绍:参考

    3. 补充C++

      常用的算法总结:参考   参考

        regex_replace、replace_if、remove_copy_if、remove_if、find_if

        adjacent_find、all_of、find_end(搜索集合最后出现的位置)includes(搜索交集)

    string str1 = "Text with some   spaces";
    str1.erase(std::remove(str1.begin(), str1.end(), ' '),  str1.end());  // "Textwithsomespaces"
    
    str1.erase(std::remove_if(str1.begin(), str1.end(), isdigit),  str1.end());  // "Textwithsomespaces"
    std::remove_copy_if(a.begin(),a.end(),b.begin(), isdigit); //删除数组,b可以是a

      remove_copy_if也能完成上述过程:参考   参考

      remove_if,不能用于map或set

    4. 获取字符串中的数字

    std::string s("xxxx 111 sssss"), ss;
    std::string::iterator ps=ps.begin();
    
    while((ps = std::find_if(ps, s.end, isdigit)) != s.end())
    {
        ss+=*ps++;
    }
    
    std::cout << ss << std::endl;

     5. 字符串进制转换

       参考

    #include <cstdlib>
    int a=10;
    char str[]="100";
    char *buf;
    long ret = strtol(str, &buf, 10);  // 第三位代表了进制,10进制,二进制等,随便填,返回结果,buf指针就像是strtok里面的那个看不见的静态指针,用于记录位置。
    
    atoi(str);
  • 相关阅读:
    手机的基本功能测试情景模式
    C#.net技术内幕04集合
    .net 发送电子邮件
    SQL:select case when(转)
    《 C#技术内幕》学习01IDisposable
    C#.net技术内幕03字符串
    点击确定后页面跳转
    SQL注入式攻击
    C#.NET技术内幕 02表达式
    window xp自带的功能之繁体字
  • 原文地址:https://www.cnblogs.com/abnk/p/11350280.html
Copyright © 2011-2022 走看看