字符串的部分库函数的实现

  1. 原文地址:http://blog.csdn.net/moxiaomomo/article/details/6437215  感谢作者分享
  2. //查找字符串中的子串  
  3. int mystrstr1(const char* string,const char* substring)  
  4. {  
  5.     if(string==NULL||substring==NULL)return -1;  
  6.   
  7.     int s1=strlen(string);  
  8.     int s2=strlen(substring);  
  9.   
  10.     if(s1<s2)return-1;  
  11.   
  12.     const char* temp=substring;  
  13.   
  14.     while(*string!='\0')      //字符串未扫描完毕  
  15.     {  
  16.         if(*string==*substring)   //当前字符匹配  
  17.         {  
  18.             while(*substring!='\0')      //判断是否与整个目标字符串匹配  
  19.             {  
  20.                 if(*(string++)!=*(substring++))      //若匹配过程不成功,则进行下一阶段扫描  
  21.                 {  
  22.                     substring=temp;  
  23.                     --string;  
  24.                     break;  
  25.                 }  
  26.                   
  27.                 if(*substring=='\0')return 1;     //匹配成功  
  28.             }  
  29.         }  
  30.         else  
  31.         {  
  32.             ++string;  
  33.         }  
  34.     }  
  35.   
  36.     return -1;  
  37. }  
  38.   
  39. //复制字符串函数  
  40. char* mystrcpy(char* DestStr,const char* SrcStr)    //源字符串标明为const  
  41. {  
  42.     if(DestStr==SrcStr)return DestStr;            //自我复制  
  43.     assert((DestStr!=NULL)&&(SrcStr!=NULL));       
  44.   
  45.     char* tempStr=DestStr;  
  46.   
  47.     while((*(DestStr++)=*(SrcStr++))!='\0');    //复制过程,遇到'\0'结束  
  48.   
  49.     return tempStr;                          //返回目标地址,方便链式操作  
  50. }  
  51.   
  52. //在一个字符串中找到第一个只出现一次的字符。如输入dsfsdfghyjkoooi,结果将输出g。  
  53. char findDestChar(const char* str)  
  54. {  
  55.     int hashTable[256]={0};    //一个字符一个byte,则字符个数不超过256个  
  56.   
  57.     const char* temp=str;  
  58.     while(*str!='\0')  
  59.     {  
  60.         hashTable[*str]++;  
  61.         str++;  
  62.     }  
  63.     while(*temp!='\0')  
  64.     {  
  65.         if(hashTable[*temp]==1)return *temp;  
  66.         temp++;  
  67.     }  
  68.   
  69.     return '\0';  
  70. }  
  71.   
  72. //比较两个字符串  
  73. int mystrcmp(const char* str1,const char* str2)  
  74. {  
  75.     assert(str1!=NULL&&str2!=NULL);  
  76.   
  77.     while(*str1&&*str2&&*str1==*str2)  
  78.     {  
  79.         ++str1;  
  80.         ++str2;  
  81.     }  
  82.     if(!(*str1)||!(*str2))return 0;  
  83.     return (*str1-*str2);  
  84. }  
  85.   
  86. //连接字符串  
  87. char* mystrcat(char* destStr,const char* srcStr)     //如果两个字符串是同一个字符串呢?  
  88. {  
  89.     assert(destStr!=NULL&&srcStr!=NULL);  
  90.   
  91.     char* temp=destStr;  
  92.   
  93.     while(*destStr!='\0'){++destStr;   }  
  94.   
  95.     while((*destStr++ = *srcStr++)!='\0');  
  96.   
  97.     return temp;  
  98. }   
  99.   
  100. //获取字符串长度  
  101. int mystrlen(const char* str)  
  102. {  
  103.     assert(str!=NULL);  
  104.   
  105.     int count=0;  
  106.     while(*str++!='\0')  
  107.     {  
  108.         count++;  
  109.     }  
  110.     return count;  
  111. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值