1. 程式人生 > >代碼題(63)— 字符串拷貝

代碼題(63)— 字符串拷貝

div code ++ 就是 sta null 針對 函數 int

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

代碼題(63)— 字符串拷貝