C++坑爹的字符串之从后往前处理字符串

今天在进行代码搬运的时候(^-^),突然发现了这样一个问题。我有一个字符串大概是这种类型的:你好呀^201.202.201.201^。我本身只需要前面的中文呀,但是服务器却智障的给我加上了一个^201.202.201.201^,而且是每一个都有这个,我理所当然的就要去掉了。可是在进行操作的时候却发现没有什么好的方式去完成这个任务。我想要的结果是最好一步完成,但是字符分割函数基本都是从前往后的,我不能保证前面的字符串不出现“^”这个字符。然后为了实现我的这个目的我只能不择手段,于是就出现了以下丑陋的代码:

    char pcDesc[30] = "你好呀^201.202.201.201^";    //模仿服务器的数据
    int Count = 0;
    for(int i = strlen(pcDesc); i >= 0; i--)
    {
        if('^' == pcDesc[i])
        {
            Count++;
            if(2 == Count)
            {
                pcDesc[i] = '\0';
                break;
            }
        }
    }

这种代码我坚决不能忍得,所以我找到了strrchr这个函数。函数解释如下:

strrchr() 函数用于查找某字符在字符串中最后一次出现的位置,其原型为:
char * strrchr(const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strrchr() 将会找出 str 字符串中最后一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到就返回该字符最后一次出现的位置,否则返回 NULL。
所以后来的代码变成了这个样子:

    char pcDesc[30] = "你好呀^201.202.201.201^";   //依旧模仿服务器数据
    pcDesc[strlen(pcDesc)-1] = '\0';
    char *tep = strrchr(pcDesc, '^');
    if(null != tep)
    {*tep = '\0';}
    printf("%s\n;", pcDesc);

这样就感觉好多了,虽然依然很low,但是比原来强多了。
总结:水平有限,就只能写到这种样子了。虽然我觉得STL肯定有很多更加方便的办法,但是目前水平不行,就只能这样了。以后想到好的办法会再修改的。也非常欢迎大牛来指导更加酷炫厉害的办法。

发布了16 篇原创文章 · 获赞 2 · 访问量 2373

猜你喜欢

转载自blog.csdn.net/u011553313/article/details/53525405
今日推荐