今天在进行代码搬运的时候(^-^),突然发现了这样一个问题。我有一个字符串大概是这种类型的:你好呀^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肯定有很多更加方便的办法,但是目前水平不行,就只能这样了。以后想到好的办法会再修改的。也非常欢迎大牛来指导更加酷炫厉害的办法。