IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言 常用字符串函数的实现 -> 正文阅读

[C++知识库]C语言 常用字符串函数的实现

my_strlen

size_t my_strlen(const char *s)

//定义一个指向字符,常量的指针,这里,s是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容

{

    size_t len = 0;//size_t 无符号整形


    if(NULL == s)//判断传递过来的指针是否为空,防止出现段错误,内存错误(野指针)

    {

        return 0;

    }


    while (*s != '\0')//判断字符串结束

    {

        len++;

        s++;

    }


    return len;//返回字符串长度

}

my_strcpy

char * my_strcpy(char *dest, char *src)
{
    if(dest == NULL || src == NULL)//判断传递过来的指针是否为空,防止出现段错误,内存错误(野指针)
    {
        return NULL;
    }
    
    char *temp = dest;//不要直接改变形参,避免传递回主函数时发生错误
    
    while(*src != '\0')
    {
        *temp = *src;
        src++;
        temp++;
    }

    *temp = '\0';

    return dest;
}

my_strcat

char * my_strncat(char *dest, char *src, size_t n)
{
        if(dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

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

    for(int i = 0; (i < n) && (*src != '\0'); i++)//指针不能越界
    {
        *temp = *src;
        temp++;
        src++;
    }

    *temp = '\0';

    return dest;
}

my_strcmp (比较的是大小不是长度,字母在后面的大)

#include <stdio.h>

#include <stdlib.h>

int my_strcmp(char *s1, char *s2)//两次判断,一、数组中的元素有空的;二、遍历各元素进行比较

{

    if (s1 == NULL && s2 != NULL) //假设数组有空的,进行判断

    {

        return -1; //小于

    }


    if (s1 != NULL && s2 == NULL)

    {

        return 1; //大于

    }


    if (s1 == NULL && s2 == NULL)

    {

        return 0; //等于

    }


    while ((*s1 != '\0') && (*s2 != '\0')) //遍历比较字符串的各个元素

    {

        if (*s1 > *s2)

        {

            return 1;

        }


        if (*s1 < *s2)

        {

            return -1;

        }


        s1++; //地址往后移,比较下一个元素

        s2++;

    }


    if (*s1 == '\0' && *s2 == '\0') //退出程序后进行判断

    {

        return 0;

    }


    if (*s1 != '\0' && *s2 == '\0')

    {

        return 1;

    }


    if (*s1 == '\0' && *s2 != '\0')

    {

        return -1;

    }

}

int main(int argc, char *argv)

{

 

    char*str=(char*)malloc(sizeof(char)*100);

    char*str1=(char*)malloc(sizeof(char)*100);

    printf("please input chars str\n");

    scanf("%s",str);

   

    printf("please input chars str1\n");

    scanf("%s",str1);

    int a = my_strcmp(str, str1);


    printf("%d\n", a);

    return 0;

}

例: 输入一个字符串,计算字符串中子串出现的次字数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

int count_sub_str(char *sub, char *src)
{
    int count = 0;
    int s_len = strlen(sub);

    while (*src != '\0')
    {
        if (strncmp(sub, src, s_len) == 0) //让src中的前strlen(sub)字符与sub比较
        {
            count++;
            src = src + s_len; //是跳过strlen(sub)个字符长度
        }
        else
        {
            src++; //不然一个一个字符跳
        }
    }

    return count;
}

int main(int argc, char *argv[])
{
    char *sub;
    char src[MAX_SIZE]; //定义常量

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

    sub = (char *)malloc(sizeof(char) * MAX_SIZE);

    if (NULL == sub)
    {
        printf("malloc sub is error!\n");
        exit(1);
    }

    printf("Please input sub:\n");
    scanf("%s", sub);

    int count = count_sub_str(sub, src);

    printf("sub str count = %d\n", count);

    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:43:27  更:2021-12-28 22:45:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:03:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码