自我实现字符串函数

来源:互联网 发布:淘宝鞋店的名字大全 编辑:程序博客网 时间:2024/06/07 09:06

字符串函数:

比较:strcmp; strncmp

拷贝:strcpy; strncpy

长度:strlen;

连接:strcat;

比较

       #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);

功能:strcmp() 函数比较两个字符串s1s2。 它返回一个整数小于、 等于还是大于零中频s1是发现,分别要小于,要与匹配,或者是大于s2

strncmp()功能类似,只是它仅比较第一个 (最多)n个字符的s1s2

返回值:Strcmp() 和strncmp()函数返回一个整型数小于等于或大于零如果s1(或第n其字节) 被发现,分别是小于对与匹配,或者是大于s2

自己实现strcmp

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 int my_strcmp(char*dest, char*src)

  6 {   

  7     while(*dest !='\0' && *src != '\0')

  8     {

  9         if(*dest > *src)

 10         {

 11             return 1;

 12         }

 13         if(*dest < *src)

 14         {

 15             return -1;

 16         }

 17         dest++;

 18         src++;

 19     }

 20     if(*dest == '\0' && *src == '\0')

 21     {

 22         return 0;

 23     }

 24     if(*dest != '\0' && *src == '\0')

 25     {

 26         return 1;

 27     }

 28     if(*dest == '\0' && *src != '\0')

 29     {

 30         return -1;

 31     }

 32

 33 }

 34

 35 int main ()

 36 {

 37     char src[MAX_SIZE];

 38     char dest[MAX_SIZE];

 39     int result;

 40

 41     printf("please input the src:\n");

 42     scanf("%[^\n]",src);

 43     getchar();

 44     printf("please input the dest:\n");

 45     scanf("%[^\n]",dest);

 46     

 47     result = my_strcmp(dest,src);

 48     printf("the result is %d\n",result);

 49     

 50     return 0;

 51 }

自己实现strncmp

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 int my_strncmp(char*dest, char*src, int num)

  6 {

  7     int i;

  8     for(i = 0; i < num; i++)

  9     {

 10         if(*dest > *src)

 11         {

 12             return 1;

 13         }

 14         if(*dest < *src)

 15         {

 16             return -1;

 17         }

 18         dest++;

 19         src++;

 20     }

 21     if(*dest == *src)

 22     {

 23         return 0;

 24     }

 25

 26 }

 27

 28 int main ()

 29 {

 30     char src[MAX_SIZE];

 31     char dest[MAX_SIZE];

 32     int result;

 33     int num;

 34

 35     printf("please input the src:\n");

 36     scanf("%[^\n]",src);

 37     getchar();

 38     printf("please input the dest:\n");

 39     scanf("%[^\n]",dest);

 40     printf("please input the num:\n");

 41     scanf("%d",&num);

 42     

 43     result = my_strncmp(dest,src,num);

 44     printf("the result is %d\n",result);

 45

 46     return 0;

 47 }

 

拷贝:

       #include <string.h>

       char *strcpy(char *dest, const char *src);

       char *strncpy(char *dest, const char *src, size_t n);

描述:Strcpy() 把函数将复制的src指向的字符串(包括终止的'\0'字符) 到阵列指出对dest。 字符串不可能重叠和目标,字符串dest必须足够大,以接收副本。

Strncpy()函数是相似的除了那不超过nsrc字节被复制。因此,如果没有空字节之间src的前n个字节,则结果将不为空。当的src长度小于ndest的其余部分将用空字节填充。

返回值:Strcpy() 把和strncpy()的函数返回一个指针,指向目标字符串dest

strcpy

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 char* my_strcpy(char*dest, char*src)

  6 {

  7     char *temp = dest;//不能把形参作为工作变量

  8     while( *src != '\0')

  9     {

 10         *temp = *src;

 11         temp++;

 12         src++;

 13     }

 14     *temp = '\0';

 15     return dest;

 16 }

 17

 18 int main ()

 19 {

 20     char src[MAX_SIZE];

 21     char dest[MAX_SIZE];

 22     char*result;

 23

 24     printf("please input the src:\n");

 25     scanf("%[^\n]",src);

 26

 27     result = my_strcpy(dest,src);

 28     printf("the dest is %s\n",dest);

 29     printf("the result is %s\n",result);

 30

 31     return 0;

 32 }

strncpy

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 char* my_strncpy(char*dest, char*src, int num)

  6 {

  7     char *temp = dest;//不能把形参作为工作变量

  8     int i;

  9     for(i = 0; i < num; i++)

 10     {

 11         *temp = *src;

 12         temp++;

 13         src++;

 14     }

 15     *temp = '\0';

 16     return dest;

 17 }

 18

 19 int main ()

 20 {

 21     char src[MAX_SIZE];

 22     char dest[MAX_SIZE];

 23     char*result;

 24     int num;

 25

 26     printf("please input the src:\n");

 27     scanf("%[^\n]",src);

 28     printf("please input the num:\n");

 29     scanf("%d",&num);

 30

 31     result = my_strncpy(dest,src,num);

 32     printf("the dest is %s\n",dest);

 33     printf("the result is %s\n",result);

 34

 35     return 0;

 36 }

 

长度

       #include <string.h>

       size_t strlen(const char *s);

描述:Strlen() 函数计算长度的字符串,不包括终止的'\0'字符。

返回值:Strlen() 函数在s中返回字符的数

strlen

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 int my_strlen(char*src)

  6 {

  7     int count = 0;

  8     while( *src != '\0')

  9     {

 10         count++;

 11         src++;

 12     }

 13     return count;

 14 }

 15

 16 int main ()

 17 {

 18     char src[MAX_SIZE];

 19     int len;

 20

 21     printf("please input the src:\n");

 22     scanf("%[^\n]",src);

 23

 24     len = my_strlen(src);

 25     printf("the len is %d\n",len);

 26

 27     return 0;

 28 }

 

连接:

       #include <string.h>

    char *strcat(char *dest, const char *src);

       char *strncat(char *dest, const char *src, size_t n);

描述:Strcat()函数将src字符串追加到dest字符串覆盖在dest,末尾的'\0'字符,然后添加终止的'\0'字符。 字符串不可能过一圈和dest字符串必须有足够的空间,结果。

Strncat()功能类似,只是它将使用从srcn 个字符。 因为结果总是名词术语试验与'\0',都写在最n + 1个字符。

返回值:Strcat()strncat()函数返回一个指向生成的字符串个数相加。

strcat

  1 #include <stdio.h>

  2

  3 #define MAX_SIZE 1024

  4

  5 char* my_strcat(char*dest, char*src)

  6 {

  7     char *temp = dest;//不能把形参作为工作变量

  8     while( *temp != '\0')

  9     {

 10         temp++;

 11     }

 12     while( *src != '\0')

 13     {

 14         *temp = *src;

 15         temp++;

 16         src++;

 17     }

 18     *temp = '\0';

 19     return dest;

 20 }

 21

 22 int main ()

 23 {

 24     char src[MAX_SIZE];

 25     char dest[MAX_SIZE];

 26     char*result;

 27

 28     printf("please input the src:\n");

 29     scanf("%[^\n]",src);

 30     getchar();

 31     printf("please input the dest:\n");

 32     scanf("%[^\n]",dest);

 33

 34     result = my_strcat(dest,src);

 35     printf("the dest is %s\n",dest);

 36     printf("the result is %s\n",result);

 37

 38     return 0;

 39 }



memset

简介

<string.h> #include

void * (void * sint csize_t n);

描述

memset() 函数填充与恒定字节 c s 所指向的内存区域的第n 个字节。

返回值

memset() 函数返回一个指向内存区 s

 

bzero

简介

<strings.h> #include

void bzero (void * ssize_t n);

描述

bzero() 函数设置字节地区起价 s 为零 (字节包含'\0') 前的n 个字节。

返回值

 

 

 

SYNOPSIS

       #include <stdlib.h>

 

       void *calloc(size_t nmemb, size_t size);

       void *malloc(size_t size);

       void free(void *ptr);

       void *realloc(void *ptr, size_t size);

 

描述

calloc() nmemb 大小的字节数每个元素的数组分配内存,并返回一个指向所分配的内存。内存设置为零。

malloc () 分配大小字节,并返回一个指向所分配的内存。不清除内存。

free() 释放 ptr,必须经由先前调用malloc ()、calloc() realloc() 所指向的内存空间。 否则为或者如果free(ptr) 已被调用之前,发生在未定义的行为。 如果ptr NULL,则执行没有概略。

realloc()更改大小字节的 ptr所指向的内存块的大小。 内容将保持不变的旧的和新的大小;和最小和对新分配的内存将被初始化。 如果 ptrNULL,电话就等于mal-loc(size);如果大小等于零,电话就等于free(ptr)。 除非ptr NULL,则它必须被返回由先前调用malloc ()、calloc() realloc()。 如果指向的区域被移动,free(ptr)是完成的。

返回值

对于 calloc() malloc(),返回的值是一个指向所分配的内存,适当地对齐的任何类型的变量,则返回 NULL,如果请求失败。

free() 不返回值。

realloc()返回一个指向新分配的内存,是适当地对齐的任何类型的变量和可能不同从 ptr,或如果请求失败,则为NULL。 如果尺寸等于0,则返回NULL 或适合要传递给free() 的指针。 如果realloc() 失败原来的块是保持不变;它不是释放或移动。

 

区别:

    (1)函数malloc不能初始化所分配的内存空间,而函数calloc.如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据.也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题.

    (2)函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那么这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那么这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零.

    (3)函数malloc向系统申请分配指定size个字节的内存空间.返回类型是void*类型.void*表示未确定类型的指针.C,C++规定,void*类型可以强制转换为任何其它类型的指针.

    (4)realloc可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变.当然,对于缩小,则被缩小的那一部分的内容会丢失.realloc并不保证调整后的内存空间和原来的内存空间保持同一内存地址.相反,realloc返回的指针很可能指向一个新的地址.

(5)realloc是从堆上分配内存的.当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;如果数据后面的字节不够,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上.这句话传递的一个重要的信息就是数据可能被移动.

 

指针+/-整数(指针的步长)

指针-指针=两个指针之间地址相隔的数据个数

 

 

 

 

 



1 0
原创粉丝点击