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

初学c语言15(字符和字符串函数)

一.字符串分类函数

头文件:ctype.h

作用:判断是什么类型的字符

函数举例:

函数

符合条件就为真

islower判断是否为小写字符(a~z)
isupper判断是否为大写字符(A~Z)
isdigit十进制数字,(0~9)字符
isxdigit16进制数字,十进制数字字符,大写A~Z,小写a~z
isspace空白字符(空白换行等)
iscntrl任何控制字符
isalpha字母a~z,A~Z
isalnum字母和数字
ispunct标点符号
isgrape任何图形字符
isprint

任何可打印字符

应用举例:

代码1(islower):

#include <stdio.h> //将字符串中的小写转换为大写(普通)
#include <ctype.h>
int main()
{int i = 0;char arr[] = "I am from China";while (arr[i]){if (islower(arr[i]))arr[i] -= 32;printf("%c", arr[i]);i++;}return 0;
}

运行结果:

二.字符转化函数

1.tolower

将大写转化为小写

2.toupper

将小写转化为大写

应用:

代码:

#include <stdio.h> 
#include <ctype.h>
int main()
{int i = 0;char arr[] = "I am from China";while (arr[i]){if (islower(arr[i]))arr[i] = toupper(arr[i]);printf("%c", arr[i]);i++;}return 0;
}

运行结果:

三.strlen的返回值

返回值为size_t类型的,为无符号类型(>=0)

举例:

#include <stdio.h> 
#include <string.h>
int main()
{int arr[] = "hjf";int arr2[] = "hjfjdf";if ((strlen(arr) - strlen(arr2)) > 0)printff(">");elseprintff("<=");return 0;
}

结果和解释:

1.strlen的模拟和实现(递归)

代码:

#include <stdio.h> 
size_t my_strlen(char* pa)
{if (*pa == 0)return 0;elsereturn 1 + my_strlen(pa + 1);
}
int main()
{char arr2[] = "hjfjdf";printf("%zu", my_strlen(arr2));return 0;
}

结果:

四.strcpy

作用:字符串拷贝,拷贝到源头的‘\0’为止

source:指针,指向源头数据

destination:指针,指向目的地空间,拷贝源头数据包括‘\0’

返回值:destination的首元素地址

头文件:string.h

注意:目的地空间必须足够大

举例:

代码:

#include <stdio.h> 
#include <string.h>
int main()
{char arr2[] = "hello";char arr1[] = "world";printf("%s", strcpy(arr2, arr1));return 0;
}

结果:

模拟和实现:

代码:

#include <stdio.h> 
char* my_strcpy(char* des, const char* sou)
{char* ret = des;while (*des++ = *sou++){;}return ret;
}
#include <string.h>
int main()
{char arr2[] = "hello";char arr1[] = "world";printf("%s", my_strcpy(arr2, arr1));return 0;
}

结果:

五.strcat

与strcat参数、返回值一样

作用:把source的字符串追加到destination后

举例:

代码:

#include <stdio.h> 
#include <string.h>
int main()
{char arr2[20] = "hello";char arr1[] = "world";printf("%s", strcat(arr2, arr1));return 0;
}

结果:

模拟和实现:

代码:

#include <stdio.h> 
char* my_strcat(char* des, const char* sou)
{char* re = des;while (*des){des++;}while (*des++ = *sou++){;}return re;
}
int main()
{char arr2[20] = "hello";char arr1[] = "world";printf("%s", my_strcat(arr2, arr1));return 0;
}

结果和解释:

六.strcmp(补充指针5)

模拟实现:

代码:

#include <stdio.h>
int my_strcmp(char* str1, char* str2)
{while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}
int main()
{char arr[] = "abcd";char arr1[] = "ab";int ret = my_strcmp(arr, arr1);printf("%d", ret);return 0;
}

结果:

七.strncpy

形式:

功能:字符串拷贝,与strcpy相比,可以控制拷贝字符串数量

应用:

八.strncat

形式:

功能:与strcat相比,可以控制追加字符数量

应用:

九.strncmp

功能:与strncmp相比,可以控制比较字符的数量

十.strstr

形式:

功能:查str2指向的字符串在str1指向的字符串中第一次出现的位置

返回值:

如果找到了,返回第一次出现位置的指针

没找到返回空指针

应用:

模拟实现:

代码:

#include <stdio.h>
const char* my_strstr(const char* str1, const char* str2)
{char* p = str1;while (*p){char* S1 =p;char* S2 = str2;while (*S1 && *S2 && *S1==*S2){S1++;S2++;}if (*S2 == '\0')return p;p++;}return NULL;
}
int main()
{char arr[] = "abcdefccdef";char arr1[20] ="def";printf("%s",my_strstr(arr,arr1));return 0;
}

结果:

十一.strtok

形式:

功能:

1.分割字符串,根据delimiters参数中的分隔符将字符串分成多个子字符串

2.根据delimiters参数中的分格符会插入’\0‘替换分隔符的位置

参数:

str:  首次传入带分割的字符串,后续传NULL,表示继续分割同一个字符串

delimiters:分隔符

返回值:

成功时返回当前指向的字符串

没有更多字符串时返回NULL

应用:

代码:

#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "192.110...211.231";char arr1[20] =".";for (char* p = strtok(arr, arr1);p != NULL;p = strtok(NULL, arr1)){printf("%s\n", p);}return 0;
}

结果:

相关文章:

  • 【图像生成大模型】Wan2.1:下一代开源大规模视频生成模型
  • windows笔记本连接RKNN3588网络配置解析
  • jvm安全点(四)openjdk17 c++源码垃圾回收之安全点轮询页内存设置不可访问
  • 李臻20242817_安全文件传输系统项目报告_第12周
  • 【Java ee初阶】jvm(3)
  • ARM A64 STR指令
  • Java大厂面试:从Web框架到微服务技术的场景化提问与解析
  • Java基础知识总结(超详细整理)
  • 发布时将多个bpl 打包成一个bpl的方法,或者说:不需要vcl60.bpl情况下 18.5K的exe 照常可以运行。
  • c++学习之--- list
  • Nordic 的RTC(Real-time counter)的介绍
  • 虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系
  • IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 VSCode + IoT Link 插件
  • SQL脚本规范
  • 【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理
  • 2025.5.12-2025.5.18:开始练习英语口语
  • httpx[http2] 和 httpx 的核心区别及使用场景如下
  • 01 Nginx安装及基本配置
  • PostGIS实现矢量数据转栅格数据【ST_AsRaster】
  • pnpm项目内网迁移
  • 上昆“学馆制”10年,完成300出折子戏和20台大戏传承
  • 西藏普兰县公安局网安大队向自媒体人宣传网络安全知识
  • 上博东馆常设陈列入选全国博物馆“十大精品”
  • 俄外长与美国务卿通电话,讨论俄美接触等问题
  • 英国6月初将公布对华关系的审计报告,外交部:望英方树立正确政策导向
  • 云南德宏州盈江县发生4.5级地震,震源深度10千米