代码题(63)— 字符串拷贝

1、strcpy函数的实现

编写 strcpy 函数

已知 strcpy 函数的原型是

Char *strcpy(char *strDest,const char *strSrc);

其中 strDest 是目的字符串, strSrc 是源字符串。

(1) 不调用 c++ 、 /c 的字符串库函数,请编写函数 strcpy

(2) Strcpy 能把 strSrc 的内容复制到 strDest ,为什么还要 char * 类型的返回值?

char * strcpy_s(char *dst, const char *src)   //[1]
{
    if (dst == NULL || src == NULL)
        return NULL;//[2]

    char *ret = dst;  //[3]
    //while ((*dst++ = *src++) != '\0'); //[4]

    while (*src != NULL)
    {
        *dst = *src;
        dst++;
        src++;
    }
    *dst = '\0';
    return ret;
}

int main()
{
    char * dest = new char();
    char * sc = "hello";
    cout << (strcpy_s(dest, sc)) << endl;
    return 0;
}

第二个问题:strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?这是为了实现链式表达式。 所谓链式表达式就是可以将strcpy函数作为其他函数的参数。
 例如 int length = strlen( strcpy( strDest, “hello world”) );

2、strcmp函数的实现

用一个函数实现两个字符串的比较,即自己编写一个strcmp函数,函数原型为:
int strcmp(char *p1,char *p2); 设p1指向字符串s1,p2指向字符串s2,
要求:
1)当s1=s2时,函数的返回值为0,
2)如果s1不等于s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不相同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1<s2,则输出负值。

int strcmp_s(char *p1, char *p2)
{
    while (*p1 != '\0'&& *p2 != '\0')
    {
        if (*p1 == *p2)
        {
            p1++;
            p2++;

        }
        else if (*p1 < *p2)
            return -1;
        else
            return 1;
    }
    return 0;

}

int main()
{
    char * dest = "abbsudjc";
    char * sc = "hello";
    cout << (strcmp_s(dest, sc)) << endl;
    return 0;
}

 

 

3、字符串翻转

class Solution {
public:
    string ReverseSentence(string str) {
        if(str.size()==0)
            return str;
        reverse(str,0,str.size()-1);
        int start = 0;
        for(int i=0;i<str.size();i++)
        {
            if(str[i]==' ')
            {
                reverse(str, start, i-1);
                start = i+1;
            }
        }
        reverse(str, start, str.size()-1);
        return str;
    }
private:
    void reverse(string& str,int start,int end)
    {
        while(start < end)
            swap(str[start++], str[end--]);
    }
};

 

void reverse(char *str,int len) //反转函数,len指要反转字符串的长度
{
 char *p=str,*q=str+len-1,temp;  //指针加法的单位是指针对应类型的字节数,此处因为是char,所以即为1
 while(*q=='\0')
     q--;
 while(q>p)
   { 
     temp=*p;
     *p=*q;
     *q=temp;
 
     p++;
     q--;
   }
}

 

posted @ 2018-09-19 22:18  深度机器学习  阅读(722)  评论(0编辑  收藏  举报