字符串类常见面试大题

1,strlen函数的实现

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

}
strlen

2,strcpy函数的实现

//题目二:strcmp函数的实现

int strcmp(const char* str1,const char* str2){
        assert(str1!=NULL&&str2!=NULL);
        int i;
        while((*str1)!='\0'&&(*str2)!='\0'){
                if((*str1)==(*str2)){
                        str1++;
                        str2++;
                }else{
                        break;
                }    
        }   
        if((*str1)=='\0'&&(*str2)=='\0'){
                return 0;
        }else{
                return (*str1)>(*str2)?1:-1;
        }   

}
strcmp

3,strcpy函数实现

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

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

4,strcat函数实现

//题目四:strcat函数的实现
char* strcat(char* strDes,const char* strSrc){
        assert(strDes!=NULL&&strSrc!=NULL);
        char* address=strDes;
        while((*strDes)!='\0'){
                strDes++;
        }   
        while(((*strDes++)=(*strSrc++))!='\0');
        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!='\0'){
        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。求剩下的字符串

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

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

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

 

posted @ 2014-06-12 15:44  bobo的学习笔记  阅读(562)  评论(0编辑  收藏  举报