• C语言中的字符串处理库函数介绍与实现


    一、介绍

    本文将主要介绍字符串处理库函数中的strlen、strcpy、strcat、strcmp、atoi等,主要由<string.h>头文件提供。

    二、strlen函数:求字符串的长度

    strlen

    头文件

    #include<string.h>

    原型

    size_t strlen(const char *s)

    说明

    求出s指向的字符串的长度(不包括null字符)。

    返回值

    返回s指向的字符串的长度。

    size_t strlen(const char *s)
    {
        size_t len = 0;
        while(*s++)
            len++;
        return len;
    }

    二、strcpy和strncpy函数:复制字符串

    strcpy

    头文件

    #include<string.h>

    原型

    char *strcpy(char *s1,const char *s2);

    说明

    s2指向的字符串复制到s1指向的数组中。若s1s2指向的内存空间重叠,则作未定义处理。

    返回值

    返回s1的值。

    strncpy

    头文件

    #include<string.h>

    原型

    char *strncpy(char *s1,const char *s2,size_t n);

    说明

    s2指向的字符串复制到s1指向的数组中。若s2的长度大于等于n,则复制到第n个字符为止。否则用null字符填充剩余部分。若s1s2指向的内存空间重叠,则作未定义处理。

    返回值

    返回s1的值。

    char *strcpy(char *s1,const char *s2)
    {
        char *tmp = s1;
        while(*s1++ = *s2++)
            ;
        return tmp;
    }
    
    char *strncpy(char *s1,const char *s2,size_t n)
    {
        char *tmp = s1;
        while(n){
            if(!(*s1++ = *s2++)) break;  //遇到''就结束循环
            n--; 
        }
        while(n--)
        *s1++ = '';  //用''填充剩余部分
        return tmp; 
    }

    三、strcat和strncat函数:连接字符串

    strcat

    头文件

    #include<string.h>

    原型

    char *strcat(char *s1,const char *s2)

    说明

    s2指向的字符串连接到s1指向的末尾。若s1s2指向的内存空间重叠,则作未定义处理

    返回值

    返回s1的值。

    strncat

    头文件

    #include<string.h>

    原型

    char *strncat(char *s1,const char *s2,size_t n);

    说明

    s2指向的字符串连接到s1指向的数组末尾。若s2的长度大于n则截断超出部分。若s1s2指向的内存空间重叠,则作未定义处理。

    返回值

    返回s1的值。

    char *strcat(char *s1,const char *s2)
    {
        char *tmp = s1;
        while(*s1)
            s1++;  //前进到s1的末尾处 
        while(*s1++ = *s2++)
            ;  //循环复制直至遇到s2中的'' 
        return tmp;
    }
    
    char *strncat(char *s1,const char *s2,size_t n)
    {
        char *tmp = s1;
        while(*s1)
            s1++;  //前进到s1的末尾处 
        while(n--)
            if(!(*s1++ = *s2++)) break;  //遇到''就结束循环 
        *s1 = '';  //在s1的末尾插入'' 
        return tmp; 
    }

    四、strcmp和strncmp函数:比较字符串的大小关系

    strcmp

    头文件

    #include<string.h>

    原型

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

    说明

    比较s1指向的字符串和s2指向的字符串的大小关系。

    返回值

    s1s2相等,则返回0;若s1大于s2,则返回正整数值,反之返回负整数值。

    strncmp

    头文件

    #include<string.h>

    原型

    char *strncat(char *s1,const char *s2,size_t n);

    说明

    比较s1指向的字符的数组和s2指向的字符的数组的前n个字符的大小关系。

    返回值

    s1s2相等,则返回0;若s1大于s2,则返回正整数值,反之返回负整数值。

    int *strcmp(char *s1,const char *s2)
    {
        while(*s1 == *s2){
            if(*s1 == '')
                return 0;
            s1++;
            s2++;
        }
        return (unsigned char)*s1 - (unsigned char)*s2;
    }
    
    int *strncmp(char *s1,const char *s2,size_t n)
    {
        while(n && *s1 && *s2){
            if(*s1 != *s2)
                return (unsigned char)*s1 - (unsigned char)*s2;
            s1++;
            s2++;
            n--;
        }
        if(!n) return 0;  //相等 
        if(*s1) return 1;  //s1 > s2
        
        return -1;    //s1 < s2
    }

    五、atoi、atol和atof函数:转换字符串

    atoi

    头文件

    #include<stdlib.h>

    原型

    int atoi(const char *nptr)

    说明

    nptr指向的字符串转换为int型表示

    返回值

    返回转换后的值。结果值不能用int型表示时的处理未定义。

    atol

    头文件

    #include<stdlib.h>

    原型

    long atol(const char *nptr)

    说明

    nptr指向的字符串转换为long型表示

    返回值

    返回转换后的值。结果值不能用long型表示时的处理未定义。

    atof

    头文件

    #include<stdlib.h>

    原型

    double atof(const char *nptr)

    说明

    nptr指向的字符串转换为double型表示

    返回值

    返回转换后的值。结果值不能用double型表示时的处理未定义。

    //使用atoi函数的例子
    
    #include<stdio.h>
    #include<stdlib.h>
    int main(void)
    {
        char str[128];
        printf("请输入字符串:");
        scanf("%s",str);
        
        printf("转换为整数后为%d。
    ",atoi(str));
        return 0;
     } 
  • 相关阅读:
    ES7/ES8 语法学习
    JavaScript中this对象原理简洁说明
    浅谈http协议
    各个浏览器之间常见的兼容性问题
    npm -v 报错:cannot find module 'core-util-is'
    对象遍历的几种方法
    Vue项目如何关闭Eslint检测
    axios 基本运用
    如何去掉vue路由中的#
    vue 父子组件、兄弟组件传值
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/9082296.html
Copyright © 2020-2023  润新知