C语言——字符函数和字符串函数_学习笔记

本文目录

  • 一、字符函数
    • 1.1 字符分类函数
      • 常见的字符分类函数介绍
      • 应用举例
    • 1.2 字符转换函数
      • 函数介绍
      • toupper 函数举例
  • 二、字符串函数
    • 2.1 常用的字符串函数介绍
    • 2.2 应用举例
      • ① strlen
      • ② strcpy
      • ③ strcat
      • ④ strcmp
      • ⑤ strncpy
      • ⑥ strncat
      • ⑦ strncmp
      • ⑧ strstr
      • ⑨ strtok

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

一、字符函数

1.1 字符分类函数

C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h>

常见的字符分类函数介绍

函数如果他的参数符合下列条件就返回真
iscntrl任何控制字符
isspace空白字符:空格‘ ’,换页‘\f,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
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任何可打印字符,包括图形字符和空白字符

应用举例

这些函数的使用方法非常类似,我们用 iscntrl 举例,其他的非常类似:

#include <stdio.h>
#include <ctype.h>
int main ()
{int i=0;char str[]="first line \n second line \n";while (!iscntrl(str[i])){putchar (str[i]);i++;}return 0;
}
  1. 在C语言中,一个"!“符号表示逻辑非操作。当它后面跟着一个布尔表达式时,它将其取反。例如,如果表达式的结果为true,则”!"操作符将其转换为false,反之亦然。
  2. iscntrl 函数遇到任何控制字符的结果返回为真。(\n是一个控制字符)

上面代码的意思是,遍历输出字符串数组str[],遇到控制字符停止输出
输出结果为:

first line 

1.2 字符转换函数

函数介绍

C语言提供了2个字符转换函数:

函数名函数作用
tolower将传入参数中的小写字母转为大写字母
toupper将传入参数中的大写字母转为小写字母

如果不使用库函数,我们将小写字母转大写字母,是小写字母进行-32得到的结果;大写转小写就是+32的结果。但是有了库函数,就可以直接使用库函数,方便快捷高效。

toupper 函数举例

void toUpperCase(char* str) 
{for (int i = 0; str[i] != '\0'; i++) {str[i] = toupper(str[i]);}
}int main() 
{char str[] = "Hello, world!";printf("原字符: %s\n", str);toUpperCase(str);printf("转换后: %s\n", str);return 0;
}

输出结果如下:
在这里插入图片描述

二、字符串函数

使用字符串函数要注意包含<string.h>头文件

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

2.1 常用的字符串函数介绍

函数函数作用
strlen(a)用于计算字符串a的长度的函数,返回值为size_t类型的数字,头文件<string.h>
strcpy(a,b)用于复制源字符串b, 到目标字符串a, 连 \0 字符一起拷贝,返回值为字符串a首元素的地址,头文件<string.h>
strcat(a,b)将源字符串 b 的内容连接到目标字符串 a 的末尾,并在结果字符串的末尾添加结束符\0。返回值为字符串a首元素的地址,头文件<string.h>
strcmp(a,b)比较a和b两个字符串,如果两个字符串完全相同,函数返回0;如果第一个参数str1中的字符串在字典顺序上位于第二个参数str2中的字符串之前,函数返回一个负整数。如果str1中的字符串在字典顺序上位于str2中的字符串之后,函数返回一个正整数。
strncpy(str1,str2,n)用于复制源字符串str2的前n个字符到目标字符串str1中,返回值为字符串str1首元素的地址。头文件<string.h>
strncat(str1,str2,n)用于将源字符串str2的前n个字符追加到目标字符串str1的末尾,返回值为字符串str1首元素的地址。头文件<string.h>
strncmp(str1,str2,n)函数按照字典顺序逐个比较两个字符串的前n个字符,直到遇到不匹配的字符或到达字符串的末尾。如果两个字符串的前n个字符完全相同,函数返回0。如果第一个参数str1中的字符串在前n个字符的字典顺序上位于第二个参数str2中的字符串之前,函数返回一个负整数。如果str1中的字符串在前n个字符的字典顺序上位于str2中的字符串之后,函数返回一个正整数。头文件<string.h>
strstr(str1,str2)是在str1字符串中查找str2字符串的第一次出现。这个函数返回的是指向str1中第一次出现str2的位置的指针。如果str2没有在str1中出现过,那么函数将返回NULL。头文件<string.h>
strtok(str,delim)用于将一个字符串分割成一系列子字符串。函数会将str按照delim中的字符进行分割,并返回指向第一个子字符串的指针。每次调用strtok函数都会将指针移动到下一个子字符串,直到没有更多的子字符串为止。(在分割字符串时,strtok函数会忽略掉字符串中的前导和尾随空格。如果分隔符字符串为NULL,则默认使用空格作为分隔符。)头文件<string.h>

2.2 应用举例

① strlen

函数原型如下:

#include <string.h>size_t strlen(const char *str);
  1. 这个函数接受一个指向字符串的指针作为参数,并返回该字符串的长度,不包括字符串末尾的空字符(‘\0’)。

  2. strlen函数使用指针来遍历字符串中的每个字符,直到遇到空字符为止,它计算遍历过的字符数并返回结果。

以下是一个使用strlen函数的示例:

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, world!";printf("Length of string: %zu\n", strlen(str));return 0;
}

在这个示例中,strlen函数计算字符串str的长度并使用printf函数输出结果。注意,我们使用了%zu格式说明符来输出strlen函数的返回值,因为它的返回类型是size_t。

输出结果为:

在这里插入图片描述

② strcpy

函数原型如下:

#include <string.h>char *strcpy(char *dest, const char *src);
  1. dest是目标字符串的指针,src是源字符串的指针。

  2. strcpy函数将源字符串复制到目标字符串中,包括终止符\0。它返回指向目标字符串的指针。

以下是一个使用strcpy函数的示例:

#include <stdio.h>
#include <string.h>int main() {char src[30] = "Hello, world!";char dest[30];strcpy(dest, src);printf("Source string: %s\n", src);printf("Destination string: %s\n", dest);return 0;
}

在这个示例中,strcpy函数将src中的字符串复制到dest中,然后通过printf函数输出两个字符串。

输出结果如下:
在这里插入图片描述

③ strcat

函数原型如下:

#include <string.h>char *strcat(char *dest, const char *src);
  1. 其中,dest是目标字符串的指针,src是要连接的源字符串的指针。

  2. strcat函数将源字符串追加到目标字符串的末尾,并在结果字符串的末尾添加一个终止符\0。它返回指向目标字符串的指针。

以下是一个使用strcat函数的示例:

#include <stdio.h>
#include <string.h>int main() {char dest[30] = "Hello, ";char src[30] = "world!";strcat(dest, src);printf("Result string: %s\n", dest);return 0;
}

在这个示例中,strcat函数将src中的字符串追加到dest的末尾,然后通过printf函数输出结果字符串。

输出结果如下:
在这里插入图片描述

④ strcmp

函数原型如下:

#include <string.h>int strcmp(const char *str1, const char *str2);
  1. 其中,str1和str2是两个要进行比较的字符串的指针。

  2. strcmp函数按字典顺序比较两个字符串,并返回它们的差值。如果两个字符串完全相同,则返回0;如果第一个字符串比第二个字符串小,则返回一个负数;如果第一个字符串比第二个字符串大,则返回一个正数。

以下是一个使用strcmp函数的示例:

#include <stdio.h>
#include <string.h>int main() {char str1[] = "Hello";char str2[] = "hello";int result = strcmp(str1, str2);if (result == 0) {printf("Strings are equal.\n");} else if (result < 0) {printf("String 1 is less than string 2.\n");} else {printf("String 1 is greater than string 2.\n");}return 0;
}

在这个示例中,strcmp函数比较了str1和str2两个字符串,并根据比较结果输出相应的消息。

输出结果为:

在这里插入图片描述

⑤ strncpy

strncpy函数的原型:

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

下面是一个使用strncpy函数的示例:

#include <stdio.h>
#include <string.h>int main() {char dest[10] = "Hello";const char src[] = " World";strncpy(dest, src, 5);printf("%s\n", dest);  // 输出:Hello Wreturn 0;
}

在这个示例中,我们有一个目标字符串"Hello"和一个源字符串" World"。我们使用strncpy函数将源字符串的前5个字符复制到目标字符串中,结果是"Hello W"。注意,因为目标数组只有10个空间,所以我们只复制了前5个字符,而不是整个源字符串。同时,因为我们没有为目标数组预留空间来添加空字符,所以最后的输出并没有自动添加空字符。

⑥ strncat

该函数的原型定义:

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

下面是一个使用strncat函数的示例:

#include <stdio.h>
#include <string.h>int main() {char dest[10] = "Hello";const char src[] = " World";strncat(dest, src, 4);printf("%s\n", dest);  // 输出:Hello Worldreturn 0;
}

在这个示例中,我们有一个目标字符串"Hello"和一个源字符串" World"。我们使用strncat函数将源字符串的前4个字符追加到目标字符串的末尾,结果是"Hello World"。

⑦ strncmp

strncmp函数的原型定义:

int strncmp(const char *str1, const char *str2, size_t n);

下面是一个使用strncmp函数的示例:

#include <stdio.h>
#include <string.h>int main() {const char str1[] = "Hello";const char str2[] = "Hell";int result = strncmp(str1, str2, 4);if (result < 0) {printf("%s is less than %s\n", str1, str2);} else if (result > 0) {printf("%s is greater than %s\n", str1, str2);} else {printf("%s is equal to %s\n", str1, str2);}return 0;
}

输出结果为:

在这里插入图片描述

⑧ strstr

strstr函数的原型是:

const char *strstr(const char *haystack, const char *needle);

以下是一个使用strstr函数的例子:

#include <stdio.h>
#include <string.h>int main() {const char *haystack = "Hello, world!";const char *needle = "world";const char *result = strstr(haystack, needle);if (result) {printf("'%s' found in '%s' at position: %ld\n", needle, haystack, result - haystack);} else {printf("'%s' not found in '%s'\n", needle, haystack);}return 0;
}

这段代码会输出:“‘world’ found in ‘Hello, world!’ at position: 7”,因为“world”在“Hello, world!”中第一次出现的位置是从字符串的第七个字符开始的。

⑨ strtok

strtok函数的原型是:

char *strtok(char *str, const char *delim);

以下是一个使用strtok函数的例子:

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World! How are you?";const char delim[] = " ,!";char *token;token = strtok(str, delim);while (token != NULL) {printf("%s\n", token);token = strtok(NULL, delim);}return 0;
}

这段代码会将字符串"Hello, World! How are you?"分割成多个子字符串,并输出每个子字符串。输出的结果将是:

Hello
World
How
are
you?

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023Web前端面试题及答案(一)

答案仅供参考&#xff0c;每人的理解不一样。 文章目录 1、简单说一说事件流原理 事件流: &#xff08;1&#xff09;事件流是指页面 接收事件的顺序; &#xff08;2&#xff09;假设页面中的元素都具备相同的事件,并且这些个元素之间是相互嵌套的 关系. &#xff08;3&#xf…

Postman使用_接口导入导出

文章目录 Postman导入数据Collections导出数据Environments导出数据Postman导出所有数据 Postman导入数据 可以导入collections&#xff08;接口集&#xff09;、Environments&#xff08;环境配置&#xff09;通过分享的链接或导出的JSON文件导入数据&#xff08;还可以从第三…

视频监控/安防监控/AI视频分析/边缘计算/TSINGSEE青犀AI算法智慧仓储解决方案

随着全球经济与科学技术的双重推动&#xff0c;我国的仓储管理已经进入了高速发展时期&#xff0c;物流仓储也由简单的储藏仓库向智能化仓储转变。TSINGSEE青犀AI智慧仓储解决方案是利用先进的信息技术和物联网技术来提高仓储管理效率、降低成本的一种仓储管理模式。 方案功能 …

家政服务预约小程序,推拿spa上门预约系统

家政服务预约小程序&#xff0c;用户直接发布需求下单&#xff0c;师傅入驻抢单派单&#xff0c;多商家入驻&#xff0c;上门预约服务流程清晰&#xff0c;适合家政公司或需要预约场景的团队公司使用&#xff0c;支持多种行业上门预约服务场景&#xff1a;家政保洁维修上门服务…

代码随想录--链表-反转链表

题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双指针 public class Main {public static class ListNode {int val;ListNode next;ListNode(int x) {val x;}}public ListNode reverseList(L…

Docker从认识到实践再到底层原理(五)|Docker镜像

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

VisualStudio Code 支持C++11插件配置

问题 Visual Studio Code中的插件: Code Runner 支持运行C、C、Java、JS、PHP、Python等多种语言。 但是它不支持C11特性的一些使用&#xff0c;比如类似错误&#xff1a; binarySearch.cpp:26:17: error: non-aggregate type ‘vector’ cannot be initialized with an ini…

Qt For OpenHarmony

本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第29期 | Qt For OpenHarmony 》 演讲嘉宾 | 蔡万苍 回顾整理 | 廖 涛 排版校对 | 李萍萍 嘉宾简介 蔡万苍&#xff0c;13 年 C/Qt 开发相关工作经验&#xff0c;曾任职 Qt 公司&#xff0c;担任技术支持、Qt 咨询师…

windows系统docker中将vue项目网站部署在nginx上

一、首先在windows系统上下载并安装docker&#xff0c;要下载windows版本 https://www.docker.com/products/docker-desktop/ PS&#xff1a;安装过程中需要WSL&#xff0c;我的是win11系统&#xff0c;直接提示了我安装就可以下一步了。其他windows系统版本我不知道是否需要单…

C++下标运算符详解

C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下: 返回值类型 & operator[ ] (参数); const 返回值类型 & operator[ ] (参数) const; 使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只…

postgresql-通用表达式

postgresql-通用表达式 入门案例简单CTE递归 CTE案例1案例2 入门案例 -- 通用表达式 with t(n) as (select 2) select * from t;简单CTE WITH cte_name (col1, col2, ...) AS (cte_query_definition ) sql_statement;WITH 表示定义 CTE&#xff0c;因此 CTE 也称为 WITH 查询…

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

Nginx&#xff0c;负载均衡&#xff0c;Http反向代理服务器&#xff0c;支持大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS 环境搭建 Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目&#xff1a;springboot-web-nginx&#xff0c;然后在该项目中&…

FastJSON将对象转JSON字符串引发的血案

问题&#xff1a;最近工作中需要将一个将近两百页的pdf的base64作为value转成JSON字符串&#xff0c;而代码中使用的方案就是JSONObject.toJSONString(obj); 而结果就是引发了OOM内存溢出。 翻阅源码找到一段关键点&#xff1a; 也就是说FastJSON内部设置了一个阈值&#xff…

C++模版基础

代码地址 gitgithub.com:CHENLitterWhite/CPPWheel.git 专栏介绍 本专栏会持续更新关于STL中的一些概念&#xff0c;会先带大家补充一些基本的概念&#xff0c;再慢慢去阅读STL源码中的需要用到的一些思想&#xff0c;有了一些基础之后&#xff0c;再手写一些STL代码。 (如果你…

深入了解MySQL中的JSON_ARRAYAGG和JSON_OBJECT函数

在MySQL数据库中&#xff0c;JSON格式的数据处理已经变得越来越常见。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它可以用来存储和表示结构化的数据。MySQL提供了一些功能强大的JSON函数&#xff0c;其中两个关键的函数是…

奶牛个体识别 奶牛身份识别

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接 知网链接 DOI链接 该文章讨论了奶牛花斑、光照条件、不同剪枝方法、不同剪枝率对准确率的影响…

类和对象(3)

文章目录 1.回顾上节2. 拷贝构造3. 运算符重载&#xff08;非常重要&#xff09;4. 赋值运算符重载 1.回顾上节 默认成员函数&#xff1a;我们不写&#xff0c;编译器自动生成。我们不写&#xff0c;编译器不会自动生成 默认生成构造和析构&#xff1a; 对于内置类型不做处理对…

PMP-项目规划过程组的重要性

一、什么是项目规划过程组 规划过程组包括明确项目全部范围、定义和优化目标&#xff0c;并为实现目标制定行动方案的一组过程。规划过程组中的过程制定项目管理计划的组成部分&#xff0c;以及用于执行项目的项目文件。取决于项目本身的性质&#xff0c;可能需要通过多轮反馈来…

使用阿里PAI DSW部署Stable Diffusion WebUI

进入到网址https://pai.console.aliyun.com/里边。 点击创建实例。 把实例名称填写好&#xff0c;选择GPU规格&#xff0c;然后选择实例名称是ecs.gn6v-c8g1.2xlarge。 选择stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04&#xff0c;然后点击下一步。…