代碼題(63)— 字符串拷貝
阿新 • • 發佈:2018-09-20
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)— 字符串拷貝