Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1164268
  • 博文数量: 146
  • 博客积分: 6619
  • 博客等级: 准将
  • 技术积分: 1621
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-29 14:06
文章分类

全部博文(146)

文章存档

2020年(1)

2019年(4)

2018年(3)

2017年(5)

2015年(5)

2014年(7)

2013年(5)

2012年(11)

2011年(15)

2010年(13)

2009年(14)

2008年(63)

分类: C/C++

2008-04-07 15:12:07

strstr ( )/* -- C语言库函数源代码 - */  
/*
    得到s1中第一次包含s2字符串的位置指针。
*/
#include
char * my_strstr(const char *s1,const char *s2)
{
    if (*s1 == 0)
     {
       if (*s2)
         return (char *) NULL;
       return (char *) s1;
     }
    while (*s1)
    {
       size_t i;
       i = 0;
       while (1)
       {
         if (s2[i] == 0)
         {
            return (char *) s1;
         }
         if (s2[i] != s1[i])
         {
            break;
         }
         i++;
       }
       s1++;
    }
    return (char *) NULL;
}
int main()
{
    char *str1 = "ammana_babi";
    char *str2 = "babi";
    char *p;
    if( (p = my_strstr(str1,str2)) == NULL)
       printf("Can't find the string \"%s\"!\n",str2);
    else
       printf("Find the string \"%s\"!\n",p);
    str1 = "abc";
    str2 = "def";
    if( (p = my_strstr(str1,str2)) == NULL)
       printf("Can't find the string \"%s\"!\n",str2);
    else
       printf("Find the string \"%s\"!\n",p);
    system("pause");
    return 0;
}
strpbrk ( )/* -- C语言库函数源代码 - */  
/*
    得到s1中第一个且是s2中字符的位置指针。
*/
#include
char * my_strpbrk(const char *s1 ,const char *s2)
{
    const char *c = s2;
    if (!*s1)
       return (char *) NULL;
    while (*s1)
    {
       for (c = s2; *c; c++)
       {
         if (*s1 == *c)
            break;
       }
       if (*c)
         break;
       s1++;
    }
    if (*c == '\0')
       s1 = NULL;
    return (char *) s1;
}
int main()
{
    char *str1 = "ammana_babi";
    char *str2 = "babi";
    char *p;
    if( (p = my_strpbrk(str1,str2)) == NULL)
       printf("No same character!\n");
    else
       printf("%c\n",*p);
    str1 = "abc";
    str2 = "def";
    if( (p = my_strpbrk(str1,str2)) == NULL)
       printf("No same character!\n");
    else
       printf("%c\n",*p);
    system("pause");
    return 0;
}
strcspn ( )/* -- C语言库函数源代码 - */  
/*
    得到s1中第一个且是s2中字符的字符位置。
*/
int my_strcspn(const char *s1 ,const char *s2)
{
    const char *s = s1;
    const char *p;
    while (*s1)
    {
       for (p = s2; *p; p++)
       {
         if (*s1 == *p)
            break;
       }
       if (*p)
         break;
       s1++;
    }
    return s1 - s;
}
int main()
{
char *str1 = "ammana_babi";
    char *str2 = "babi";
    int offset;
    if((offset = my_strcspn(str1,str2)) >= strlen(str1))
       printf("Can't find the same character!\n");
    else
       printf("%c\n",*(str1 + offset));
    str1 = "abc";
    str2 = "def";
    if((offset = my_strcspn(str1,str2)) >= strlen(str1))
       printf("Can't find the same character!\n");
    else
       printf("%c\n",*(str1 + offset));
    system("pause");
    return 0;
}
strspn ( )/* -- C语言库函数源代码 - */  
/*
    得到s1中第一个且不是s2中任意字符的字符位置。
*/
int my_strspn(const char *s1 ,const char *s2)
{
    const char *s = s1;
    const char *p;
    while (*s1)
    {
       for (p = s2; *p; p++)
       {
         if (*s1 == *p)
            break;
       }
       if (*p == '\0')
         break;
       s1++;
    }
    return s1 - s;
}
int main()
{
char *str1 = "ammana_babi";
    char *str2 = "babi";
    int offset;
    if((offset = my_strspn(str1,str2)) >= strlen(str1))
       printf("Can't find the different character!\n");
    else
       printf("%c\n",*(str1 + offset));
    str1 = "abc";
    str2 = "abc";
    if((offset = my_strspn(str1,str2)) >= strlen(str1))
       printf("Can't find the different character!\n");
    else
       printf("%c\n",*(str1 + offset));
    system("pause");
    return 0;
}
strrev ( )/* -- C语言库函数源代码 - */  
/*
    Reverses the order of characters in the string.
    The terminating null character remains in place.
    把字符串的所有字符的顺序颠倒过来(不包括空字符NULL)。
    返回指向颠倒顺序后的字符串指针。
*/
char * my_strrev(char *str)
{
    char *right = str;
    char *left = str;
    char ch;
    while (*right)    right++;
    right--;
    while (left < right)
    {
        ch = *left;
         *left++ = *right;
         *right-- = ch;
    }
    return(str);
}
/*
    而我自己写的代码就略微显的有些啰里啰嗦,不简洁,
    更不是很太爽快。这个问题是值得好好想一下的了。
    下面就是我的垃圾代码
*/
char * my_StrReverse(char * ch)
{
    char tempch,* tch;
    int Len,i;
    tch = ch;
    Len = strlen(ch);
    for(i=0;i    {
       tempch = *tch;
       *tch = *(tch + Len - 2*i - 1);
       *(tch+Len-2*i-1) = tempch;
       tch++;
    }
    return ch;
}
int main()
{
    char str[] ="ammana_babi";
    puts(my_strrev(str));
    puts(my_StrReverse(str));
    system("pause");
    return 0;
}
strnset ( )/* -- C语言库函数源代码 - */  
/*
    Sets the first count characters of string the character value.If the length of string is less than count, the length of string is used in place of n.
    把字符串的前count个字符设置为字符val。
*/
char * my_strnset(char * str,int val,int count)
{
    char *p = str;
    while (count-- && *p)
       *p++ = (char)val;
    return(p);
}
int main()
{
    char str[] ="ammana_babi";
    my_strnset(str,'*',strlen(str)-4);
    puts(str);
    system("pause");
    return 0;
}
strset ( )/* -- C语言库函数源代码 - */  
/*
    Sets all of characters in string (except the terminating '/0'character) equal to val.
    把字符串的所有字符都设置为字符val。
*/
char * my_strset(char *str,int val)
{
    char *p = str;
    while (*str)
       *str++ = (char)val;
    return(p);
}
int main()
{
    char str[] ="ammana_babi";
    my_strset(str,'z');
    puts(str);
    system("pause");
    return 0;
}
strupr ( )/* -- C语言库函数源代码 - */  
/*
    Force string to lower case。
    将字符串转换为大写。只改变字符串中出现的小写字母,不改变其他字符。
*/
char * my_strupr(char *str)
{
    char *p = str;
    while (*p != '\0')
    {
       if(*p >= 'a' && *p <= 'z')
       *p -= 0x20;
       p++;
     }
    return str;
}
int main()
{
    int i;
    char str1[]= "Ammana";
    char str2[] = "baBi";
    char str3[] = "AMMANA";
    char str4[] = "aMmAn_BabI";  
    puts(my_strupr(str1));
    puts(my_strupr(str2));
    puts(my_strupr(str3));
    puts(my_strupr(str4));
    system("pause");
    return 0;
}
strlwr ( )/* -- C语言库函数源代码 - */  
/*
    Force string to lower case。
    将字符串转换为小写。只改变字符串中出现的大写字母,不改变其他字符。
*/
char * my_strlwr(char *str)
{
    char *p = str;
    while (*p != '\0')
    {
       if(*p >= 'A' && *p <= 'Z')
         *p = (*p) + 0x20;
       p++;
     }
   return str;
}
int main()
{
    int i;
    char str1[]= "Ammana";
    char str2[] = "baBi";
    char str3[] = "AMMANA";
    char str4[] = "aMmAn_BabI";
    puts(my_strlwr(str1));
    puts(my_strlwr(str2));
    puts(my_strlwr(str3));
    puts(my_strlwr(str4));
    system("pause");
    return 0;
}
strdup ( )/* -- C语言库函数源代码 - */  
/*
    Allocates enough storage via malloc() for a copy of the string, copies the string into the new memory, and returns a pointer to it.
    复制字符串,返回指向被复制字符串的指针。所需空间由malloc()分配,且可以由free()释放。需要注意的是,在调用完这个函数后,一定要记得释放内存空间吆。
*/
#include
int my_strlen ( const char * str )
{
    const char *p = str;
     while( *p++ ) ;
     return( (int)(p - str - 1) );
}
char * my_strcpy(char * dst, const char * src)
{
    char * cp = dst;
    while( *cp++ = *src++ )   ;         
    return( dst );
}
char * my_strdup(const char *str)
{
    char *p;
    if (!str)
       return(NULL);
    if (p = malloc(my_strlen(str) + 1))
       return(my_strcpy(p,str));
    return(NULL);
}
int main()
{
    char *str = "ammana_babi";
    char *p;
    p = my_strdup("ammana_babi");
    puts(p);
    free(p);
    system("pause");
    return 0;
}
strrchr ( )/* -- C语言库函数源代码 - */  
/*
    Finds the last occurrence of ch in string.   The terminating null character is used as part of the search.
    查找在字符串中最后一次出现字符’ch’的位置。如果str中存在字符ch,返回出现ch的位置的指针;否则返回NULL。
*/
#include
char * my_strrchr(const char * str,int ch)
{
    char *p = (char *)str;
    while (*str) str++;
    while (str-- != p && *str != (char)ch);
    if (*str == (char)ch)
         return( (char *)str );
    return(NULL);
}
int main()
{
    char *str = "ammana_babi";
    char * p;
    char ch;
   
    ch = '9';
    p = (char *)my_strrchr(str,ch);
    if(p == NULL)
       printf("Can't find the character %c !\n",ch);
    else
       printf("Find the character %c !\n",*p);
   
    ch = 'b';
    p = (char *)my_strrchr(str,ch);
    if(p == NULL)
       printf("Can't find the character %c !\n",ch);
    else
       printf("Find the character %c !\n",*p);
    system("pause");
    return 0;
}
strchr ( )/* -- C语言库函数源代码 - */  
#include
/*
    Searches a string for a given character, which may be the null character '\0'.
    查找字符串string中首次出现字符ch的位置。如果string中存在字符ch,返回首次出现ch的位置的指针;否则返回NULL。
*/
char * my_strchr(const char *str, int ch)
{
    while (*str && *str != (char)ch)
         str++;
    if (*str == (char)ch)
         return((char *)str);
    return(NULL);
}
int main()
{
    char *str = "ammana_babi";
    char * p;
    char ch;
   
    ch = '9';
    p = (char *)my_strchr(str,ch);
    if(p == NULL)
       printf("Can't find the character %c !\n",ch);
    else
       printf("Find the character %c !\n",*p);
   
    ch = 'b';
    p = (char *)my_strchr(str,ch);
    if(p == NULL)
       printf("Can't find the character %c !\n",ch);
    else
       printf("Find the character %c !\n",*p);
    system("pause");
    return 0;
}
memset ( )/* -- C语言库函数源代码 - */  
/*
    Sets the first "count" bytes of the memory starting at "dst" to the character value "val".
    把dst所指内存区域的前count个字节设置为val。返回指向dst的指针。
    在实际应用中,我们有时候会用malloc函数来申请一些内存空间,这个内存空间有时候需要初始化,常用memset来进行初始化。
    如:
    int *p;
    p = (int *)malloc( 0x400 * sizeof(int));
    memset(p,0,0x400);
*/
void * my_memset(void *dst,int val,int count)
{
    void *p = dst;
    while (count--)
    {
       *(char *)dst = (char)val;
         dst = (char *)dst + 1;
    }
    return p;
}
int main()
{
    char str[] ="ammana_babi";
    my_memset(str,'z',strlen(str));
    puts(str);
    system("pause");
    return 0;
}
memicmp ( )/* -- C语言库函数源代码 - */  
/*
memicmp perform a case-insensitive memory comparision.
For differences,upper case letters are mapped to lower case.Thus, "abc_" < "ABCD" since "_" < "d".
    (与memcmp区别就是在比较的时候不区分大小写)比较内存区域buffer1和buffer2的前count个字节。当buffer1 < buffer2时,返回值 < 0;当buffer1 = buffer2时,返回值 0;当buffer1 > buffer2时,返回值 > 0。
*/
int my_tolower(char ch)
{
    if(ch >= 'A' && ch <= 'Z')
       return (ch + 0x20);
    return ch;
}
int my_memicmp(const void *buffer1,const void *buffer2,int count)
{
     int f = 0;
     int l = 0;
     while (count--)
     {
         if ( (*(unsigned char *)buffer1 == *(unsigned char *)buffer2) ||
                 ((f = my_tolower( *(unsigned char *)buffer1 )) ==
                 (l =   my_tolower( *(unsigned char *)buffer2 ))) )
         {
         buffer1 = (char *)buffer1 + 1;
         buffer2 = (char *)buffer2 + 1;
         }
         else
             break;
     }
     return ( f - l );
}
void Print(char * str1,char *str2,int t)
{
    if(t > 0)
       printf("\n%s Upper Than %s\n",str1,str2);
    else if(t < 0)
       printf("\n%s Lower Than %s\n",str1,str2);
    else
       printf("\n%s Equal %s\n",str1,str2);
      
}
int main()
{
    char *str1= "ammana";
    char *str2 = "babi";
    char *str3 = "AMMANA";
    char *str4 = "bab_";

    Print(str1,str2,my_memicmp(str1,str2,4));
    Print(str3,str1,my_memicmp(str3,str1,4));
    Print(str4,str2,my_memicmp(str4,str2,4));
   
    system("pause");
    return 0;
}
阅读(2137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~