字符串查找与过滤

今天和一爱学习的技术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) |
0

上一篇:面试题--找单数

下一篇:第一个offer

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值