• 部分字符串的实现函数


      一些字符串的实现函数,没有经过测试,可能有些函数还存在一些错误,有时间再改。

      1 /*****************************************************
    2 * 函数说明:
    3 * 进行字符串拷贝
    4 * 函数参数:
    5 * const char *src -源字符串
    6 * char *dest -目标字符串
    7 * 返回值:
    8 * 返回目标字符串的地址
    9 *****************************************************/
    10 char *strcpy_yl(const char *src,char *dest)
    11 {
    12 assert(src!=NULL && dest!=NULL);
    13 int len=strlen(src);
    14 char *address=dest;
    15 if (dest<(src+len))
    16 {
    17 char *psrc=src+len-1;
    18 char *pdest=dest+len-1;
    19 while(len--)
    20 {
    21 *pdest-- = *psrc--;
    22 }
    23 *(dest+len)='\0';
    24 return address;
    25 }
    26 else
    27 {
    28 while(len--)
    29 {
    30 *dest++ = *src++;
    31 }
    32 *dest='\0';
    33 return address;
    34 }
    35 }
    36
    37 /*******************************************************
    38 * 函数说明:
    39 * 寻找字符串中目标字符第一次出现的位置
    40 * 函数参数:
    41 * const char *str -字符串
    42 * char c -目标字符
    43 * 返回值:
    44 * 如果存在,返回目标字符的位置;不存在则返回-1
    45 *********************************************************/
    46 int strchr_yl(const char *str,char c)
    47 {
    48 assert(str!=NULL);
    49 size_t len=strlen(str);
    50 int i;
    51 for (i=0;i<len;i++)
    52 {
    53 if (str[i]==c)
    54 {
    55 return i;
    56 }
    57 }
    58 return -1;
    59 }
    60
    61 /*************************************************************
    62 * 函数说明:
    63 * 对两个字符串进行比较
    64 * 函数参数:
    65 * const char *str1 -待比较的字符串1
    66 * const char *str2 -待比较的字符串2
    67 * 返回值:
    68 * 如果字符串1大于字符串2,则返回1;如果字符串1等于字符串2,则返回0;否则返回-1
    69 ***************************************************************/
    70 int strcmp_yl(const char *str1,const char *str2)
    71 {
    72 assert(str1!=NULL && str2!=NULL);
    73 while(*str1 && *str2 && *str1==*str2)
    74 {
    75 str1++;
    76 str2++;
    77 }
    78 return (*str1-*str2>0)? 1: (*str1-*str2==0)? 0: -1;
    79 }
    80
    81
    82 /*************************************************************
    83 * 函数说明:
    84 * 字符串连接
    85 * 函数参数:
    86 * const char *src -源字符串
    87 * char *dest -目标字符串
    88 * 返回值:
    89 * 返回字符串连接后的字符串的指针
    90 ***************************************************************/
    91 char *strcat_yl(const char *src,char *dest)
    92 {
    93 assert(src!=NULL && dest!=NULL);
    94 char *pdest=dest;
    95 while(dest!='\0')
    96 {
    97 dest++;
    98 }
    99 while((*dest++=*src++)!='\0');
    100 return pdest;
    101 }
    102
    103
    104 /****************************************************************
    105 * 函数说明:
    106 * 求字符串的长度
    107 * 函数参数:
    108 * const char *str -待求的字符串
    109 * 返回值:
    110 * 返回字符串的长度
    111 ****************************************************************/
    112 size_t strlen_yl(const char *str)
    113 {
    114 assert(str!=NULL);
    115
    116 size_t len=0;
    117 while(*str!='\0')
    118 {
    119 len++;
    120 str++;
    121 }
    122 return len;
    123 }
    124
    125 /*************************************************************
    126 * 函数说明:
    127 * 将src所指向的count个字节复制到dest指向的内存块
    128 * 函数参数:
    129 * void *dest -目标指针
    130 * const void *src -源指针
    131 * size_t count -要复制的字节数
    132 * 返回值:
    133 * 返回目标地址
    134 **************************************************************/
    135 void *memcpy_yl(void *dest,const void *src,size_t count)
    136 {
    137 assert(dest!=NULL && src!=NULL);
    138
    139 void *pdest=dest;
    140 while(count--)
    141 {
    142 *(char *)dest=*(char *)src;
    143 src=(char *)src+1;
    144 dest=(char *)dest+1;
    145 }
    146
    147 return pdest;
    148
    149 }
    150
    151
    152 /************************************************************
    153 * 函数说明:
    154 * 将字符串转换为整型
    155 * 函数参数:
    156 * string str -待转换的字符串
    157 * 返回值:
    158 * 返回转换后的整型
    159 *************************************************************/
    160 int str2int_yl(string str)
    161 {
    162 assert(str.length()>0);
    163 int pos=0;
    164 int sign=1;
    165 if (str[pos]=='+')
    166 {
    167 pos++;
    168 }
    169 else if (str[pos]=='-')
    170 {
    171 sign=-1;
    172 pos++;
    173 }
    174
    175 int num=0;
    176 while(pos<str.length())
    177 {
    178 assert(str[pos]>='0' && str[pos]<='9');
    179 num=10*num+(str[pos]-'0');
    180 assert(num>=0);
    181 pos++;
    182 }
    183
    184 num=num*sign;
    185 return num;
    186 }
    187
    188
    189 /*******************************************************
    190 * 函数说明:
    191 * 找字符串中第一个只出现一次的字符串
    192 * 函数参数:
    193 * const char *str -待求的字符串
    194 * 返回值:
    195 * 返回找到的字符串,如果不存在则返回字符'\0'
    196 *******************************************************/
    197 char FindNotRepeatChar(const char *str)
    198 {
    199 if (str==NULL)
    200 {
    201 return '\0';
    202 }
    203 const int SIZE=256;
    204 int table[SIZE]={0};
    205
    206 char pstr=str;
    207 while(*pstr!='\0')
    208 {
    209 table[*pstr]++;
    210 pstr++;
    211 }
    212
    213 while(*str!='\0')
    214 {
    215 if (table[*str]==1)
    216 {
    217 return *str;
    218 }
    219 str++;
    220 }
    221
    222 return '\0';
    223 }
    224
    225
    226 /******************************************************************
    227 * 函数说明:
    228 * 字符串中寻找子串
    229 * 函数参数:
    230 * const char *pSrc -待求字符串
    231 * const char *pSubStr -子串
    232 * 返回值:
    233 * 返回子串的位置
    234 ********************************************************************/
    1. int strstr_yl(const char *pSrc, const char *pSubStr)
    2. {
    3. assert((pSrc != NULL) && (pSubStr != NULL));
    4. int len1 = strlen(pSrc);
    5. int len2 = strlen(pSubStr);
    6. int i = 0, j = 0;
    7. for (j = 0; j < len2; ++j)
    8. {
    9. if (pSrc[i] != pSubStr[j])
    10. {
    11. i++;
    12. j = 0;
    13. }
    14. else
    15. {
    16. i++;
    17. }
    18. if (j == (len2 - 1))
    19. {
    20. return i - len2;
    21. }
    22. if (i > len1 - len2)
    23. {
    24. return -1;
    25. }
    26. }
    27. return -1;
    28. }
  • 相关阅读:
    ios实例开发精品源码文章推荐
    Citrix 服务器虚拟化之二十七 XenApp6.5发布服务器桌面
    TOJ3651确定比赛名次
    TOJ3649欧拉回路
    强连通分量(LRJ训练指南)
    汉语-词语-体谅:百科
    汉语-词语-关心:百科
    汉语-词语-懒惰:百科
    汉语-词语-平静:百科
    汉语-词语-遗迹:百科
  • 原文地址:https://www.cnblogs.com/Trony/p/2436642.html
Copyright © 2020-2023  润新知