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。求剩下的字符串

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

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

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

  • 相关阅读:
    maven继承父工程统一版本号
    shiro权限控制参考
    动态查询列表页面的分页
    SVN服务器更改ip地址后怎么办
    cookie记住密码功能
    分享小插件的问题
    阿里云短信验证
    从svn上更新maven项目时,所有文件变成包的形式
    Maven工具
    Mybatis的dao层传递单参出现的问题
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3784066.html
Copyright © 2011-2022 走看看