笔试中最常见的string相关函数
strcpy:题目:已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
1.不调用库函数,实现strcpy函数。
2.解释为什么要返回char *。
解答:
1.
char *strcpy(char *strDestination, const char *strSource) { assert(strDestination && strSource); char *strD=strDestination; while ((*strDestination++=*strSource++)!='\0') NULL; return strD; }
2.为了实现链式调用:strcpy(b,strcpy(c,a))
Strstr:返回heyStack中第一个与needle匹配的地址
char * mystrstr(char* heyStack,char* needle) { //assert(heyStack!=NULL&&needle!=NULL); int heyStack_len=strlen(heyStack); int needle_len=strlen(needle); int i=0; if(needle_len>heyStack_len) return NULL; for(;i<heyStack_len-needle_len+1;i++){ int j=0; for(;j<needle_len;j++){ if(needle[j]!=heyStack[i+j]) break; } if(j==needle_len) return &heyStack[i]; } return NULL; }
strcat:在目标字符串的末尾添加源字符串
char* strcat(char* dest,const char* source) { assert(dest!=NULL&&source!=NULL); char* destTemp=dest; char* sourceTemp=source; while(*destTemp++!='\0'); destTemp--; while((*destTemp++=*sourceTemp++)!='\0'); return dest; }
strrev:颠倒字符串
char* strrev(char* dest ) { assert(dest!=NULL); char* temp=dest; char* result=new char[strlen(dest)+1]; char* resultTemp=result; while(*temp++!='\0'); temp--; int count=strlen(dest); while(count--) *resultTemp++=*temp--; *resultTemp='\0'; return result; }