C语言进阶——字符函数与字符串函数

一、求字符串长度

strlen

size_t strlen(const char* str);
  • 字符串以'\0'为结束的标志,strlen函数返回的是在字符串中'\0'出现前的字符个数(不包含'\0')。
  • 参数指向的字符串必须要以'\0'为结束。
  • 注意函数的返回值是size_t,是无符号的。
#include<stdio.h>
size_t my_strlen(const char* str)
{
    size_t count = 0;
    while (*str != '\0')
    {
        count += 1;
        ++str;
    }
    return count;
}
int main()
{
    size_t sz = my_strlen("abc");
    printf("字符串长度为:%zd", sz);
    return 0;
}

二、长度不受限制的字符串函数

strcpy

char* strcpy(char *destination,const char *source);
  • 函数有两个参数,将第二个参数中的字符串拷贝到第一个字符串中。
  • 源字符串必须以'\0'结束。
  • 会将源字符串中的'\0'拷贝到目标空间。
  • 目标空间必须足够大。
  • 目标空间必须可变。
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest,const char * src)
{
    char* ret = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++)
    {
        ;
    }
    return ret;
}
int main()
{
    char arr[20] = "hello world";
    char arr2[] = "xxxxxx";
    my_strcpy(arr2, arr);
    return 0;
}
while (*dest++ = *src++)

该语句的工作原理如下:

  1. *src的值被赋给*dest。
  2. src和dest都向前移动一位。
  3. 检查*src是否为’\0',如果不是,则重复步骤 1 和 2;如果是,则退出循环。

strcat

char *strcat(char *destinantion,const char *src)
  • 源字符串必须以'\0'结尾。
  • 目的地址空间必须足够大。
  • 目标空间必须可修改。
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,const char * src)
{
    char* ret = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest != '\0') dest++;
    while (*dest++ = * src++)
    {
        ;
    }
    return ret;
}
int main()
{
    char arr[20] = "hello world";
    char arr2[] = "xxxxxx";
    my_strcat(arr, arr2);
    printf("%s", arr);
    return 0;
}

注意:strcat最好不要自己给自己追加。

strcmp

int strcmp(const char *str1, const char *str2)
  • 第一个字符串大于第二个字符串,则返回大于0的数字。
  • 第一个字符串等于第二个字符串,则返回0。
  • 第一个字符串小于第二个字符串,则返回小于0。
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char *str1, const char *str2)
{
    assert(str1);
    assert(str2);
    while(*str1 == *str2)
    {
        if(*str1 == '\0') return 0;
        ++str1;
        ++str2;
    }
    if(*str1 > *str2) return 1;
    else return -1;
}
int main()
{
    int ret = my_strcmp("bbb","bcb");
    printf("%d",ret);
    return 0;
}

三、长度受限制的字符串函数

strncpy

char* strncpy(char *destination,const char *source,size_t num);
  • 从源字符串中拷贝num个字符到目标空间。
  • 如果源字符串长度小于num,则拷贝完源字符串后追加0,直到num个。

strncat

char* strncat(char *destination,const char *source,size_t num);
  • 追加与拷贝不同,如果源字符串长度小于num,不会追加0。
  • 如果源字符串大于num,那么只会追加num个字符,并且在末尾添加上'\0'。

strncmp

int strncmp(const char *destination,const char *source,size_t num);
  • 比较到出现不一样的字符或者一个字符串结束或者超过num个字符。

四、字符串查找

strstr

char* my_strstr(char* str1, char* str2)
#include<stdio.h>
#include<assert.h>
char* my_strstr(char* str1,const char* str2)
{
    char* cp = str1;
    char* s1 = cp;
    char* s2 = str2;
    while (*cp)
    {
        s1 = cp;
        s2 = str2;
        while (*s1 && *s2 && *s1 == *s2)
        {
            ++s1;
            ++s2;
        }
        if (*s2 == '\0') return cp;
        ++cp;
    }
    return NULL;
}
int main()
{
    char* arr = my_strstr("abcedfg", "bce");
    printf("%s", arr);
    return 0;
}

strtok

char* strtok(char* str, const char* sep)
  • sep参数是个字符串,定义了用作分隔符的字符集合。
  • 第一个参数指定一个字符串,它包含了个或者多个由sep字符串中的一个或多个分隔符分隔的标记。
  • strtok函数的第一个参数不为NULL,那么strtok函数将会找到str中的第一个分隔符标记,strtok将保存它在str中的位置。
  • strtok函数的第一个参数为NULL,函数将在str中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的分隔符标记,那么返回NULL。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char* str = "dada@dad.kfaf@555";
    char* sep = "@.";
    char* copy[30];
    strcpy(copy, str);
    char* ret = NULL;
    for (ret = strtok(copy, sep); ret != NULL; ret = strtok(NULL, sep))
    {
        printf("%s\n", ret);
    }
    return 0;
}

五、错误信息报告

strerror

char* strerror(int errnum)

返回错误码所对应的错误信息。

六、字符分类函数

字符分类函数

函数如果参数符合下列条件就返回真    
iscntrl任何控制字符

isspace

空白字符:空格,换页'\f',换行'\n',回车'\r',制表符'\t'等
isdigit十进制数字0~9
isxdigit        十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower小写字母a~z
isupper大写字母A~Z
isalpha字母a~z或A~Z
isalnum

字母或者数组,a~z,A~Z,0~9

ispunct标点符号,任何不属于数字或者字母的图形字符
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

字符转换:

tolower//将字母转换为小写
toupper//将字母转换为大写
#include <stdio.h>
#include <ctype.h>
#include <string.h>

void toUpperCase(char *str) {
    for (int i = 0; str[i] != '\0'; i++) {
        str[i] = toupper(str[i]);
    }
}

void toLowerCase(char *str) {
    for (int i = 0; str[i] != '\0'; i++) {
        str[i] = tolower(str[i]);
    }
}

int main() {
    char str[] = "Hello World!";
    printf("Original: %s\n", str);

    toUpperCase(str);
    printf("Upper case: %s\n", str);

    toLowerCase(str);
    printf("Lower case: %s\n", str);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

⌈ 传知代码 ⌋ 农作物病害分类(Web端实现)

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

我谈椒盐噪声的统计模型

在成像系统发展长河的早期&#xff0c;椒盐噪声曾经不可避免&#xff0c;但是如今&#xff0c;即使在专用成像设备中&#xff08;如遥感、医学&#xff09;&#xff0c;椒盐噪声也属罕见了。所以&#xff0c;现在在图像处理领域&#xff0c;研究椒盐噪声的去除没有多少实际意义…

kafka 如何减少数据丢失?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列&#xff0c;广泛用…

R实验——logistic回归、LDA、QDAKNN

数据集介绍&#xff1a; mpg&#xff0c;miles per gallon即油耗&#xff0c;这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

python-PyQt项目实战案例:制作一个视频播放器

文章目录 1. 关键问题描述2. 通过OpenCV读取视频/打开摄像头抓取视频3. 通过PyQt 中的 QTimer定时器实现视频播放4. PyQt 视频播放器实现代码参考文献 1. 关键问题描述 在前面的文章中已经分享了pyqt制作图像处理工具的文章&#xff0c;也知道pyqt通过使用label控件显示图像的…

AI视听新体验!浙大阿里提出视频到音乐生成模型MuVi:可解决语义对齐和节奏同步问题

MuVi旨在解决视频到音乐生成(V2M)中的语义对齐和节奏同步问题。 MuVi通过专门设计的视觉适配器分析视频内容,以提取上下文 和时间相关的特征,这些特征用于生成与视频的情感、主题及其节奏和节拍相匹配的音乐。MuVi在音频质量和时间同步方面表现优于现有基线方法,并展示了其在风…

安装nginx实现多ip访问多网站

一.首先安装nginx [rootserver nginx]# systemctl stop firewalld 关防火墙 [rootserver nginx]# setenforce 0 关selinux [rootserver nginx]# mount /dev/sr0 /mnt 挂载点 [rootserver nginx]# dnf install nginx -y 安装nginx二&#xff0c;添加地址 [rootserver…

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

不使用扩展,win10下网页长截图

安卓手机&#xff0c;各大厂商都会有自带的长截图工具&#xff0c; 用起来很方便&#xff0c; 反而是windows桌面版网页长截图&#xff0c; 偶尔会用下&#xff0c;用得不多&#xff0c; 用一次后下次用又忘记了&#xff0c; 今天正好要用到&#xff0c; 特记录下方便以后查阅…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析

深度学习的技术演进经历了从卷积神经网络&#xff08;CNN&#xff09;到循环神经网络&#xff08;RNN&#xff09;再到 Transformer 的重要发展。这三个架构分别擅长处理图像、序列数据和多种任务的特征&#xff0c;标志着深度学习在不同领域取得的进步。 1. 卷积神经网络&…

旧电脑安装Win11提示“这台电脑当前不满足windows11系统要求”,安装中断。怎么办?

前言 最近有很多小伙伴也获取了LTSC版本的Win11镜像&#xff0c;很大一部分小伙伴安装这个系统也是比较顺利的。 有顺利安装完成的&#xff0c;肯定也有安装不顺利的。这都是很正常的事情&#xff0c;毕竟这个镜像对电脑硬件要求还是挺高的。 有一部分小伙伴在安装Windows11 …

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本&#xff0c;但是最后一哆嗦碰到个报错&#xff0c;这个小问题卡住了我一天&#xff0c;之间的埪就不说了&#xff0c;直接说我是怎么解决的&#xff0c;满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…

基于Python+SQL Server2008实现(GUI)快递管理系统

快递业务管理系统的设计与实现 摘要: 着网络新零售的到来&#xff0c;传统物流在网购的洗礼下迅速蜕变&#xff0c;在这场以互联网为基础的时代变革中&#xff0c;哪家企业能率先转变其工作模式就能最先分得一杯羹&#xff0c;物流管理也不例外。传统的物流管理模式效率低下&a…

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 &#xff08;一&#xff09;模版方法postProcessBeanFactory &#xff08;二&#xff09;AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …

62页PPT | 项目企业信息化现状调研与流程改进方案

这份PPT详细介绍了企业在C2M项目中的信息化现状调研与流程改进方案&#xff0c;涵盖了销售、采购、仓库、物流、CAD制图、CAM编程、计划、生产、质检和财务管理等多个部门的现行流程分析、作业瓶颈、未来流程建议以及针对性的改善建议&#xff0c;旨在通过信息化手段提升企业的…

这是一篇vue3 的详细教程

Vue 3 详细教程 一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于构建用户界面。Vue 3 是其最新版本&#xff0c;带来了许多新特性和性能优化&#xff0c;使开发更加高效和灵活。 二、环境搭建 安装 Node.js 前往Node.js 官方网站下载并安装适合你…

网站的SSL证书快到期了怎么办?怎么续签?

网站的SSL证书即将到期时&#xff0c;需要续签一个新的证书以保持网站的安全性和信任度。以下是续签SSL证书的一般步骤&#xff1a; 1. 选择证书提供商 如果您之前使用的是免费证书&#xff0c;您可以选择继续使用同一提供商的免费证书服务进行续签。如果您需要更高级别的证书…

Python:背景知识及环境安装

一、计算机的基础概念 1.1 什么是计算机&#xff1f; 最早我们有计算器&#xff0c;但是他只能完成算数运算的功能 而计算机能完成的工作有&#xff1a; &#xff08;1&#xff09;算术运算 &#xff08;2&#xff09;逻辑判断 &#xff08;3&#xff09;数据存储 &#xff08…

【AI学习】Mamba学习(十二):深入理解S4模型

#1024程序员节&#xff5c;征文# HiPPO的学习暂告一段落&#xff0c;按照“HiPPO->S4->Mamba 演化历程”&#xff0c;接着学习S4。 S4对应的论文&#xff1a;《Efficiently Modeling Long Sequences with Structured State Spaces》 文章链接&#xff1a;https://ar5iv…