今天和一爱学习的技术MM聊天,关于怎样插入链表节点的,她把节点插在链表尾部,我给她提供了插入在首部的方法,更简洁,然后她回了句“我的是最笨的(附带大哭的QQ表情)”,突然想给她开个玩笑,
于是回了句
char tmp[10];
char *test="我的是最最笨的";
strcpy(tmp, strtok(test, "的"));
strcat(tmp, strtok(NULL, "的"));
程序员式的幽默,把第一"的"去掉。
偏偏这时编译不过了,一调试原来是strtok不支持汉字的delim...
无语。。。
于是决定自己写个过滤汉字的函数。
#include <stdio.h> #include <stdlib.h> #include <string.h>
//如果过滤成功,则在堆上生成一个过滤好的字符串,并返回其地址,否则返回NULL
char* str_filter(char *src, const char* dest){ if(!src||!dest)//不合法。
return NULL; char *p = strstr(src, dest);//查找要过滤的字符串的起始位置
char *res = (char*)malloc(strlen(src)+1); char *tmp = res; char *s = src;//记录开始位置
while(p){//如果查找到目标 //如果目标不是汉字,有可能*p和前面一个字节组成一个汉字。 if(!(*dest&1<<8)){
if(p!=s){//如果p不是开始位置
p--; if(*p&1<<8){//如果查找结果的首字符是汉字的一部分,则需要进一步查找。 p++; p++; p = strstr(p, dest); }else p++; } } while(p!=src)//src每次前进一个字节,直到遇到要过滤的字符
*tmp++ = *src++; for(int i=strlen(dest); i>0 ;i--,src++);//跳过要过滤的字符
p=strstr(src, dest);//查找下一个目标
} while((*tmp++=*src++)!='\0');//将其余字符拷贝到res中。
return res; } int main(){ char *test="adsf"; char *t=str_filter(test, "a"); printf("%s\n", t); if(t) free(t); }
|
hoho,完工!
也没那么简单,考查的就是细心。。。
记得百度有个题就是查找字符串的。
而腾讯有个面试题就是过滤字符串的。。。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(846) | 评论(0) | 转发(0) |