自己编写代码实现常用字符串函数的功能

常见的字符串函数包括strlen,strcpy和strncpy,strcat和strncat,strcmp和strncmp,下面一一描述他们的功能和实现方法。

①strlen()

原型:extern int strlen(char *s);
用法:#include <string.h>
功能:计算字符串s的长度
说明:返回s的长度,不包括结束符NULL。

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

int my_strlen(char *s)
{
    int i = 0;

    while(*s != '\0')
    {
        i++;
        s++;
    }

    return i;
}

int main()
{
    char src[MAX_SIZE];

    printf("please input a string:\n");

    scanf("%s",src);

    int len = my_strlen(src);

    printf("len = %d\n",len);

    return 0;
}


②strcpy和strncpy

strcpy():

原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NUL结束的字符串复制到dest所指的数组中。
返回指向dest结尾处字符(NUL)的指针。

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

char *my_strcpy(char *dest, char *src)
{
    char *temp = dest;    //定义中间变量存放形参的地址

    while(*src != '\0')
    {
        *temp = *src;    //将src中的内容依次赋值给temp
        temp++;
        src++;
    }

    *temp = '\0';    //给temp加上结束字符

    return dest;    //返回temp的首地址,即dest
}


int main()
{
    char dest[MAX_SIZE] = {0};
    char src[MAX_SIZE] = {0};


    printf("please input dest:\n");
    scanf("%s",dest);

    printf("please input src:\n");
    scanf("%s",src);

    char *strcpy = my_strcpy(dest,src);    //调用函数


    printf("strcpy = %s\n",strcpy);
}


strncpy():

原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
说明:
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

char *my_strncpy(char *dest, char *src, int num)
{
    int i;
    char *temp = dest;    //定义中间变量存放形参的地址

    for(i = 0; i < num; i++)    //已知循环次数,使用for循环
    {
        *temp = *src;    //将src中的内容依次赋值给temp
        temp++;
        src++;
    }

    *temp = '\0';    //给temp加上结束字符

    return dest;    //返回temp的首地址,即dest
}


int main()
{
    char dest[MAX_SIZE] = {0};
    char src[MAX_SIZE] = {0};


    printf("please input dest:\n");
    scanf("%s",dest);

    printf("please input src:\n");
    scanf("%s",src);

    char *result = my_strncpy(dest,src,5);    //调用函数


    printf("strcpy = %s\n",result);
}


③strcat和strncat

strcat():

原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回指向dest的指针。

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

char *my_strcat(char *dest, char *src)
{
    char *temp = dest;

    while(*temp != '\0')
    {
        temp++;
    }

    while(*src != '\0')
    {
        *temp = *src;
        temp++;
        src++;
    }

    *temp = '\0';

    return dest;
}

int main()
{
    char dest[MAX_SIZE] = "hi hi";
    char src[MAX_SIZE] = "hello world";

    char *result = my_strcat(dest,src);

    printf("result = %s\n",result);

    return 0;
}

strncat:

原型:extern char *strncat(char *dest,char *src,int n);
用法:#include <string.h>
功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回指向dest的指针。

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

char *my_strncat(char *dest, char *src, int num)
{
    int i;
    char *temp = dest;

    while(*temp != '\0')
    {
        temp++;
    }

    for(i = 0; i < num; i++)
    {
        *temp = *src;
        temp++;
        src++;
    }

    *temp = '\0';

    return dest;
}

int main()
{
    char dest[MAX_SIZE] = "hi hi";
    char src[MAX_SIZE] = "hello world";

    char *result = my_strncat(dest,src,8);

    printf("dest = %s\n",result);

    return 0;
}

④strcmp和strncmp

strcmp:

功 能: 将一个串与另一个比较
用 法: intstrcmpi(char *str1, char *str2);

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

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

    while(*dest != '\0' && *src != '\0')    //控制条件为两个数组中有一个先结束
    {
        if(*dest > *src)
        {
            return 1;
        }
        if(*dest < *src)
        {
            return -1;
        }
        dest++;
        src++;
    }

//判断那个数组先结束

    if(*dest == '\0' && *src == '\0')    //两个数组同时结束
    {
        return 0;
    }
    if(*dest == '\0' && *src != '\0')    //dest先结束
    {
        return -1;
    }
    if(*dest != '\0' && *src == '\0')    //src先结束
    {
        return 1;
    }
}

int main()
{
    char dest[MAX_SIZE] = {0};
    char src[MAX_SIZE] = {0};

    printf("please input dest:\n");
    scanf("%s",dest);

    printf("please input src:\n");
    scanf("%s",src);

    int result = my_strcmp(dest,src);    //调用函数

    printf("result = %d\n",result);

    return 0;
}

strncmp:

功 能: 把串中的一部分与另一串中的一部分比较 (前n个字符)
用 法: int strncmp(char *str1, char *str2,int maxlen);

实现代码:

#include <stdio.h>

#define MAX_SIZE 1024

int my_strncmp(char *dest, char *src, int n)
{
    int i;
    int result = 0;

    for(i = 0; i < n; i++)  
    {
        if(*dest > *src)
        {
            result = 1;
            break;
        }
        if(*dest < *src)
        {
            result = -1;
            break;
        }
        if(*dest = *src)
        {
            dest++;
            src++;
        }
    }

    return result;
}

int main()
{
    char dest[MAX_SIZE];
    char src[MAX_SIZE];
    int n;

    printf("please input dest:\n");
    scanf("%s",dest);

    printf("please input src:\n");
    scanf("%s",src);
    getchar();
   
    printf("please input n:\n");
    scanf("%d",&n);

    int result = my_strncmp(dest,src,n);    //调用函数

    printf("result = %d\n",result);

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值