首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

理解实现字符串的操作(strcpy函数等)(一)

2012-11-17 
懂得实现字符串的操作(strcpy函数等)(一)一般面试的时候,如果要考查你的C++基本功,关于字符串的实现的内容

懂得实现字符串的操作(strcpy函数等)(一)
一般面试的时候,如果要考查你的C++基本功,关于字符串的实现的内容出现的频率比较高。
下面是个人实现的三个简单的字符串相关函数,以后会陆续补充。

//(1)查找字符串中的子串int mystrstr(const char* string,const char* substring){if(string==NULL||substring==NULL)return -1;int s1=strlen(string);int s2=strlen(substring);if(s1<s2)return-1;const char* temp=substring;while(*(string++)!='\0')      //字符串未扫描完毕{if(*string==*substring)  //当前字符匹配{while(*substring!='\0') //判断是否与整个目标字符串匹配{if(*(string++)!=*(substring++)) //若匹配过程不成功,则进行下一阶段扫描{substring=temp;break;}if(*substring=='\0')return 1;     //匹配成功}}}return -1;}//(2)复制字符串函数char* mystrcpy(char* DestStr,const char* SrcStr)    //源字符串标明为const{if(DestStr==SrcStr)return DestStr;  //自我复制assert((DestStr!=NULL)&&(SrcStr!=NULL));  //断言地址非空char* tempStr=DestStr;while((*(DestStr++)=*(SrcStr++))!='\0');//复制过程,遇到'\0'结束return tempStr; //返回目标地址,方便链式操作}//(3)在一个字符串中找到第一个只出现一次的字符。如输入dsfsdfghyjkoooi,结果将输出g。char findDestChar(const char* str){int hashTable[256]={0};   //一个字符一个byte,则字符个数不超过256个const char* temp=str;while(*str!='\0'){hashTable[*str]++;str++;}while(*temp!='\0'){if(hashTable[*temp]==1)return *temp;temp++;}return '\0';}


资料补充:关于strcpy函数实现的标准,如何将它写得完美(转载自http://blog.csdn.net/v_JULY_v/archive/2011/05/13/6417600.aspx)
//得2分     void strcpy( char *strDest, char *strSrc )     {         while( (*strDest++ = * strSrc++) != '\0' );     }        //得4分     void strcpy( char *strDest, const char *strSrc )      {         //将源字符串加const,表明其为输入参数,加2分         while( (*strDest++ = * strSrc++) != '\0' );     }        //得7分     void strcpy(char *strDest, const char *strSrc)      {         //对源地址和目的地址加非0断言,加3分         assert( (strDest != NULL) && (strSrc != NULL) );         while( (*strDest++ = * strSrc++) != '\0' );     }        //得9分     //为了实现链式操作,将目的地址返回,加2分!     char * strcpy( char *strDest, const char *strSrc )      {         assert( (strDest != NULL) && (strSrc != NULL) );         char *address = strDest;          while( (*strDest++ = * strSrc++) != '\0' );          return address;     }      //得10分,基本上所有的情况,都考虑到了  //如果有考虑到源目所指区域有重叠的情况,加1分!     char * strcpy( char *strDest, const char *strSrc )      {         if(strDest == strSrc) { return strDest; }      assert( (strDest != NULL) && (strSrc != NULL) );         char *address = strDest;          while( (*strDest++ = * strSrc++) != '\0' );          return address;     }   

1 楼 基德KID.1412 2011-05-21   查找字符串中的子串,子串可以不连续对吧? 2 楼 moxiaomomo 2011-05-21   基德KID.1412 写道查找字符串中的子串,子串可以不连续对吧?
一般来说子串应该是指连续的吧

热点排行