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

Posted eilearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码题(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 *strDest, const char *strSrc)
{
    assert((strDest != nullptr) && (strSrc != NULL));

    char *address = strDest;
    //while ((*strDest++ = *strSrc++) != ‘/ 0‘);
    while (*strSrc != /0)
    {
        *strDest = *strSrc;
        strDest++;
        strSrc++;
    }
    *strDest = /0;
    return address;
}

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

2、字符串翻转

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==)
     q--;
 while(q>p)
   { 
     temp=*p;
     *p=*q;
     *q=temp;
 
     p++;
     q--;
   }
}

 


以上是关于代码题(63)— 字符串拷贝的主要内容,如果未能解决你的问题,请参考以下文章

26个jQuery代码片段使用技巧

leetcode 63 简单题

JavaScript笔试题(js高级代码片段)

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段

剑指OFFER----面试题63. 股票的最大利润