zoukankan      html  css  js  c++  java
  • c语言字符串操作实现

    复试前,用字符串相关的操作来练练手。敲一遍总该用些用处。

      1 #include <stdio.h>
      2 #include <assert.h>
      3 #include <malloc.h>
      4 
      5 int strlen(const char *str)
      6 {
      7     assert(str!=NULL);
      8     int len = 0;
      9     while(*str++)
     10         ++len;
     11     return len;
     12 }
     13 
     14 char *strcpy(char *to, const char *from)
     15 {
     16     assert((to!=NULL)&&(from!=NULL));
     17     char *result = to;
     18     while(*to++ = *from++);
     19     return result;
     20 }
     21 
     22 char *strncpy(char *to, const char *from, size_t count)
     23 {
     24     assert((to!=NULL)&&(from!=NULL));
     25     char *result = to;
     26     while (count--)
     27     {
     28         if (*from)
     29             *to++=*from++;
     30         else
     31         {
     32             *to++='\0';
     33             break;
     34         }
     35     }
     36     return result;
     37 }
     38 
     39 void *memset(void *buffer, int c, size_t count)
     40 {
     41     assert(buffer!=NULL);
     42     char *p = (char *)buffer;
     43     while(count--)
     44         *p++ = (char)c;
     45     return buffer;
     46 }
     47 
     48 char *strchr(char *str, int c)
     49 {
     50     assert(str!=NULL);
     51     for (;*str!=(char)c;++str)
     52     {
     53         if(!(*str))
     54             return NULL;
     55     }
     56     return str;
     57 }
     58 
     59 //need to release the block by hand in your outside code
     60 char *strcat(char *strDes, const char *strSrc)
     61 {
     62     assert((strDes!=NULL)&&(strSrc!=NULL));
     63     char *address = strDes;
     64     int len = 0;
     65     while(*strDes)
     66     {
     67         len++;
     68         strDes++;
     69     }
     70     char *strResult = (char *)malloc(len+1+strlen(strSrc));
     71     char *strRtmp = strResult; 
     72     while(*strResult++=*address++);
     73     strResult--;
     74     while(*strResult++=*strSrc++);
     75     return strRtmp;
     76 }
     77 
     78 
     79 char * strncat(char *strDes, const char *strSrc, unsigned int count)
     80 {
     81     assert((strDes!=NULL)&&(strSrc!=NULL));
     82     char *address = strDes;
     83     while(*strDes)
     84         ++strDes;
     85     while(count--&&*strSrc)
     86         *strDes++=*strSrc++;
     87     *strDes = '\0';
     88     return address;
     89 }
     90 
     91 char *strstr(const char *strSrc, const char *str)
     92 {
     93     assert(strSrc!=NULL&&str!=NULL);
     94     const char *s = strSrc;
     95     const char *t = str;
     96     for (;*strSrc;++strSrc)
     97     {
     98         for(s=strSrc,t=str;*t&&*s==*t;++s,++t);
     99         if(!(*t))
    100             return (char *)strSrc;
    101     }
    102     return NULL;
    103 }
    104 
    105 //need to release the block by hand in your outside code
    106 char *strdup(char *strSrc)
    107 {
    108     if (strSrc!=NULL)
    109     {
    110         char *start = strSrc;
    111         int len = 0;
    112         while(*strSrc++)
    113             len++;
    114         char *address =(char *)malloc(len+1);
    115         assert(address!=NULL);
    116         while((*address++=*start++));
    117         return address-(len+1);
    118     }
    119     return NULL;
    120 }
    121 
    122 void *memcpy(void *to, const void *from, size_t count)
    123 {
    124     assert((to!=NULL)&&(from!=NULL));
    125     void *result = to;
    126     char *pto = (char *)to;
    127     char *pfrom = (char *)from;
    128     while(count--)
    129         *pto++=*pfrom++;
    130     return result;
    131 }
    132 
    133 void *memmove(void *to, const void *from, size_t count)
    134 {
    135     assert((to!=NULL)&&(from!=NULL));
    136     void *result = to;
    137     char *pto = (char *)to;
    138     char *pfrom = (char *)from;
    139     assert(pto<pfrom||pto>pfrom+count-1);
    140     if(pto<pfrom||pto>pfrom+count-1)
    141         while(count--)
    142             *pto++ = *pfrom++;
    143     else
    144     {
    145         pto = pto+count-1;
    146         pfrom = pfrom+count-1;
    147         while(count--)
    148             *pto-- = *pfrom--;
    149     }
    150     return result;
    151 }
    152 
    153 
    154 int strcmp(const char *s, const char *t)
    155 {
    156     assert(s!=NULL&&t!=NULL);
    157     while(*s&&*t&&*s==*t)
    158     {
    159         ++s;++t;
    160     }
    161     return (*s-*t);
    162 }
    163 
    164 
    165 int stricmp(const char *dst, const char *src)
    166 {
    167     assert(dst!=NULL&&src!=NULL);
    168     int ch1, ch2;
    169     while (*dst&&*src)
    170     {
    171         if((ch1=(int)*dst)>='A'&&(ch1<='Z'))
    172             ch1+=0x20;
    173         if((ch2=(int)*src)>='A'&&(ch2<='Z'))
    174             ch2+=0x20;
    175         if(ch1==ch2)
    176         {
    177             ++dst;++src;
    178         }
    179         else break;
    180     }
    181     return (ch1-ch2);
    182 }
    183 
    184 
    185 int strncmp(const char *s, const char *t, unsigned int count)
    186 {
    187     assert((s!=NULL)&&(t!=NULL));
    188     while (*s&&*t&&*s==*t&&count--)
    189     {
    190         ++s;++t;
    191     }
    192     return (*s-*t);
    193 }
  • 相关阅读:
    (Java随机数举例)随机扔一千次硬币的正反次数
    hibernate+spring的整合思路加实例(配图解)
    从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写
    ssh连接Linux自动断开后再也无法连上的问题
    面试题10:二进制中1的个数
    C 语言统计关键字出现次数
    在Eclipse中Attach Source
    Visual Sudio 2012转换界面风格
    java 判断字符串IP合法性以及获取IP的数值形式
    java.lang.string split 以点分割字符串无法正常拆分字符串
  • 原文地址:https://www.cnblogs.com/xuangong/p/2964328.html
Copyright © 2011-2022 走看看