zoukankan      html  css  js  c++  java
  • 字符串类常见面试大题

    1,strlen函数的实现

    //题目一:strlen函数的实现
    //1,注意异常抛出
    //2,注意蒋行参用const来修饰
    int strlen(const char* str){
            int len=0;
            while(*str++!=''){
                    len++;
            }   
            return len;
    
    }
    strlen

    2,strcpy函数的实现

    //题目二:strcmp函数的实现
    
    int strcmp(const char* str1,const char* str2){
            assert(str1!=NULL&&str2!=NULL);
            int i;
            while((*str1)!=''&&(*str2)!=''){
                    if((*str1)==(*str2)){
                            str1++;
                            str2++;
                    }else{
                            break;
                    }    
            }   
            if((*str1)==''&&(*str2)==''){
                    return 0;
            }else{
                    return (*str1)>(*str2)?1:-1;
            }   
    
    }
    strcmp

    3,strcpy函数实现

    (这个能写的特别精炼的)

    //题目三:strcpy函数的实现
    //1,链式反映
    //2,注意最后的''需不需要单独赋值
    char* strcpy(char* strDes, const char* strSrc){
            assert(strDes!=NULL&&strSrc!=NULL);
            char * adress=strDes;
            while(((*strDes++)=(*strSrc))!='');
            return adress;
    }
    strcpy的实现

    4,strcat函数实现

    //题目四:strcat函数的实现
    char* strcat(char* strDes,const char* strSrc){
            assert(strDes!=NULL&&strSrc!=NULL);
            char* address=strDes;
            while((*strDes)!=''){
                    strDes++;
            }   
            while(((*strDes++)=(*strSrc++))!='');
            return address;
    }
    strcat函数实现

    5,字符串转换为数字

    //题目五,蒋字符串转换为数字
    //1,注意非空
    //2,注意正负
    //3,注意非法,返回-1
    //4,注意溢出,返回-2
    int str2num(const char* str){
            assert(str!=NULL);
            const char* p=str;
            bool minus=false;
            long long result=0;
            if(*p=='-'){
                    minus=true;
                    p++;
            }else if(*p=='+'){
                    p++;
            }   
            while(*p!=''){
            if(*p<'0'||*p>'9'){
                    return -1; 
            }   
    
            result=result*10+((*p)-'0');
            if(result>std::numeric_limits<int>::max()){
            //说明溢出
            return -2; 
            }   
            p++;
            }   
            minus=true?-result:result;
    
            return result;
    }
    字符串转换为数字

    6,一个字符串abaaaabbab&#%,删除其中的符合下列条件的三元组(第一个字母和第三个字母相等,但和第二个字母不相等)如删除aba,但不删除aaa。求剩下的字符串

    错误思路:用三个指针指向相邻的三个元素,从后往前依次扫描和移动

    错误原因:删除的同时更改了字符串原来的属性

    正确思路:利用辅助的标记数组,首先扫描一遍字符串,将接下来想要删除的位置进行标记,之后删除即可。

  • 相关阅读:
    Backbone源码解析(六):观察者模式应用
    NodeJs 开发微信公众号(五)真实环境部署
    NodeJs 开发微信公众号(四)微信网页授权
    NodeJs 开发微信公众号(三)微信事件交互
    NodeJs 开发微信公众号(二)测试环境部署
    NodeJs 开发微信公众号(一)准备工作
    Css 动画的回调
    GIT常用命令笔记
    论如何在手机端web前端实现自定义原生控件的样式
    Box-sizing:小身材,大拳头!
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3784066.html
Copyright © 2011-2022 走看看