当前位置: 首页 > news >正文

《C语言疑难点 --- 字符函数和字符串函数专题(上)》

《C语言疑难点 — 字符函数和字符串函数专题(上)》


在这里插入图片描述

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目

✨***永远相信美好的事情即将发生***

在这里插入图片描述

文章目录

  • 《C语言疑难点 --- 字符函数和字符串函数专题(上)》
  • 一、字符分类函数
  • 二、字符转换函数
  • 三、[strlen](https://cplusplus.com/reference/cstring/strlen/?kw=strlen)的使用和模拟实现
    • 3.1 strlen函数的解析和使用与注意
    • 3.2strlen函数的模拟实现
      • 3.2.1计数器方式
      • 3.2.2 递归
      • 3.2.3指针减指针
  • 四、[strcpy](https://legacy.cplusplus.com/reference/cstring/strcpy/?kw=strcpy%E2%80%98)的使用和模拟实现
    • 4.1 strcpy函数的解析和使用与注意
    • 4.2 strcpy 函数的模拟实现
  • 五、[strcat](https://legacy.cplusplus.com/reference/cstring/strcat/?kw=strcat)的使用和模拟实现
    • 5.1 strcat函数的解析和使用与注意
    • 5.2 strcat 函数的模拟实现
  • 六、[strcmp](https://legacy.cplusplus.com/reference/cstring/strcmp/?kw=strcmp)的使用和模拟实现
    • 6.1 strcmp函数的解析和使用与注意
    • 6.2 strcmp函数的模拟实现
  • 总结 --- 每日励志时刻



一、字符分类函数

C语言中有⼀系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。
这些函数的使用都需要包含⼀个头⽂件是:<ctype.h>
在这里插入图片描述
这些函数的使用方法非常类似,我们通过讲解⼀个函数其他的以此类推:

int islower ( int c );

islower 是能够判断参数部分的c是否是小写字母的。
通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回0。
例:
写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。

#include <stdio.h>
#include <ctype.h>
int main()
{int i = 0;char str[] = "Test String.\n";char c;while (str[i]){c = str[i];if (islower(c))c -= 32;putchar(c);i++;}return 0;
}

运行结果:
在这里插入图片描述

二、字符转换函数

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

1int tolower ( int c );    //将参数传进去的大写字母转小写     2int toupper ( int c ); //将参数传进去的小写字母转大写

我们还是以一道例题来看:
例:
写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。

#include <stdio.h>
#include <ctype.h>
int main()
{int i = 0;char str[] = "Test String.\n";char c;while (str[i]){c = str[i];if (islower(c))str[i] = toupper(str[i]);putchar(c);i++;}return 0;
}

运行结果:(可以看出是一样)
在这里插入图片描述

三、strlen的使用和模拟实现

3.1 strlen函数的解析和使用与注意

size_t strlen ( const char * str );

(1)功能:
(1)统计参数str指向的字符串的长度,统计的是字符串中 ‘\0’ 之前的字符的个数
(2)参数:str指针,指向了要统计长度的字符串。返回值:返回了str指向的字符串的长度,返回的长度不会是负数,所以返回类型是size_t。
(2)使用:

#include<stdio.h>
#include<string.h>int main()
{const char* str = "abcdef";printf("%zd\n", strlen(str));//6return 0;
}

(3)注意事项:
(1) 字符串以’\0’ 作为结束标志,strlen函数返回的是在字符串中’\0’ 前⾯出现的字符个数(不包’\0’ )。
(2) 注意函数的返回值为size_t,是无符号的(易错)
(3)strlen的使用需要包含头文件

3.2strlen函数的模拟实现

3.2.1计数器方式

#include <stdio.h>size_t my_strlen(const char* str)
{size_t cnt = 0;while (*str){cnt++; str++;}return cnt;
}
int main()
{char str[] = "hello world!";int len = my_strlen(str);printf("%d", len);return 0;
}

3.2.2 递归

#include <stdio.h>size_t my_strlen(const char* str)
{assert(str);if (*str == '\0')return 0;return 1 + my_strlen(str + 1);
}
int main()
{char str[] = "hello world!";int len = my_strlen(str);printf("%d", len);return 0;
}

3.2.3指针减指针

#include <stdio.h>
#include <assert.h>size_t my_strlen(const char* str)
{assert(str);char* p = str;while (*p){p++;}return p - str;
}
int main()
{char str[] = "hello world!";int len = my_strlen(str);printf("%d", len);return 0;
}

四、strcpy的使用和模拟实现

4.1 strcpy函数的解析和使用与注意

char* strcpy(char * destination, const char * source );

(1)功能:
字符串拷贝,将源头的字符串拷贝到目标空间中,拷贝到源头字符串中的 ‘\0’ 为止。
参数: destination指针,指向目的地空间;
source指针,指向源头数据。
返回值:strcpy函数返回的目标空间的起始地址
(2)使用:

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = { 0 };char arr2[] = "hello";char*p=strcpy(arr1, arr2);printf("%s\n", p);printf("%s\n", arr1);//两种打印方式都可以return 0;
}

(3)注意:
(1)源字符串必须以’\0’ 结束。
(2)会将源字符串中的’\0’ 拷贝到目标空间。
(3)目标空间必须足够大,以确保能存放源字符串。
(4)目标空间必须可修改。

4.2 strcpy 函数的模拟实现

#include <stdio.h>
#include <assert.h>char* my_strcpy(char* dest, const char* source)
{char* temp = dest;assert(dest != NULL);assert(source != NULL);while (*dest++ = *source++){;}return temp;
}
int main()
{char arr1[20] = { 0 };char arr2[] = "hello";char* p = my_strcpy(arr1, arr2);printf("%s\n", p);printf("%s\n", arr1);//两种打印方式都可以return 0;
}

运行结果:
在这里插入图片描述

五、strcat的使用和模拟实现

5.1 strcat函数的解析和使用与注意

 char *  strcat (char  *  destination, const char  *  source );

(1)功能:
功能:字符串追加,把source指针的源字符串中的所有字符都追加到destination指向的空间中
参数:destination指针,指向目的地空间;source指针,指向源头数据。
返回值:strcat函数返回的目标空间的起始地址

(2)使用:

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "hello ";char arr2[] = "world";char* p = strcat(arr1, arr2);printf("%s\n", p);printf("%s\n", arr1);//两种打印方式都可以return 0;
}

(3)注意:
(1) 源字符串必须以’\0’ 结束。
(2)目标字符串中也得有’\0’,否则没办法知道追加从哪⾥开始。
(3) 目标空间必须有足够的大,能容纳下源字符串的内容。
(4)目标空间必须可修改

5.2 strcat 函数的模拟实现

#include <stdio.h>
#include <assert.h>char* my_strcat(char* dest, const char* source)
{char* temp = dest;assert(dest != NULL && source != NULL);while (*dest)dest++;while (*dest++ = *source++){;}return temp;
}int main()
{char arr1[20] = "hello ";char arr2[] = "world";char* p = my_strcat(arr1, arr2);printf("%s\n", p);printf("%s\n", arr1);//两种打印方式都可以return 0;
}

运行结果:
在这里插入图片描述

六、strcmp的使用和模拟实现

6.1 strcmp函数的解析和使用与注意

int strcmp (const char * str1, const char * str2);

(1)解析:
用来比较str1和str2指向的字符串,从两个字符的第一个字符开始比较,如果两个字符的ASCLL码值相等,就比较下一个字符,直到遇到不相等的两个字符,或者字符串结束。
参数:str1指针,指针要比较的第一个字符串;str2指针,指向要比较的第二个字符串。
返回值:标准规定第一个字符串大于第二个字符串,则返回大于0的数字第一个字符串等于第二个字符串,则返回0\n第一个字符串小于第二个字符串,则返回小于0的数字

(2)使用:

#include<stdio.h>
#include<string.h>int main()
{char arr1[] = "abcdef";char arr2[] = "abcd";int ret=strcmp(arr1, arr2);//strcmp中直接放字符串也可以比if (ret > 0)printf("arr1 > arr2\n");else if (ret < 0)printf("arr1 < arr2\n");elseprintf("arr1 == arr2\n");return 0;
}

6.2 strcmp函数的模拟实现

#include <stdio.h>
#include <assert.h>int my_strcmp(char* arr1, char* arr2)
{while (*arr1 == *arr2){if (*arr1 == '\0')return 0;arr1++;arr2++;}if (*arr1 > *arr2)return 1;elsereturn -1;
}int main()
{char arr1[20] = "abcdef";char arr2[] = "abcd";int p = my_strcmp(arr1, arr2);if (p == 0)printf("%d\n", p);else if (p > 0)printf("%d\n", p);elseprintf("%d\n",p);return 0;
}

运行结果:
在这里插入图片描述

总结 — 每日励志时刻

在这里插入图片描述

http://www.dtcms.com/a/528970.html

相关文章:

  • 株洲网站建设联系方式知名的家居行业网站开发
  • 华为堡垒机
  • Wordpress做什么网站赚钱外贸英文网站建设
  • MyBatis注解与XML使用对比
  • Connector
  • 招标网免费查看什么是优化师
  • 商城网站开发哪家好室内装饰设计费收费标准
  • 自动驾驶中的传感器技术70——Navigation(7)
  • 个人接装修活怎样给网站做seo优化
  • php做购物网站wordpress 3.4.2
  • 阮一峰《TypeScript 教程》学习笔记——namespace
  • WEB前端技术基础(第三章:css-网页美化的衣装-上)
  • 大学生网站开发项目计划书范文南宁营销型网站设计
  • C++ 游戏开发示例:简单的贪吃蛇游戏
  • 东莞小学网站建设培训学校网站建设要点
  • 网络安全编程——TCP客户端以及服务端Python实现
  • 基于多尺度特征融合的自注意力度量学习的小样本故障诊断
  • UVa 1227 The Longest Constant Gene
  • datasophon1.2.1 二开
  • 建大网站首页华为商城网站建设
  • 运放的虚短和虚断
  • 建设网站公司兴田德润在哪里谷歌seo外链
  • 是“浴盆曲线”失灵,还是HDD变好了?
  • Tuesday JS,一款可视化小说编辑器
  • 景区旅游网站平台建设方案销售案例网站
  • 【小白笔记】input() 和 print() 这两个函数
  • 营销型网站哪家做的好东莞app
  • 部署PHP8.4(KylinV10SP3、Ubuntu2204、Rocky9.3)
  • 一套配置 双重体验:孪易 IOC 化解 端/流双渲染应用难题
  • jQuery Mobile 实例