当前位置: 首页 > 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;
}

结果:

http://www.xdnf.cn/news/510733.html

相关文章:

  • (5)python爬虫--BeautifulSoup(bs4)
  • 01 CentOS根分区满了扩容
  • 2025年- H30-Lc138- 141.环形链表(快慢指针,快2慢1)---java版
  • 学习是有方法的——费曼学习法
  • 先说爱的人为什么先离开
  • 轻量级视频剪辑方案:FFmpeg图形化工具体验
  • Linux的MySQL头文件和找不到头文件问题解决
  • Java API学习笔记
  • Spring AI Alibaba集成阿里云百炼大模型应用
  • SmartETL函数式组件的设计与应用
  • 【大模型面试每日一题】Day 22:若训练中发现Loss突然剧烈波动(Spike),可能有哪些原因?如何定位和修复?
  • nginx模块使用、过滤器模块以及handler模块
  • 自适应Prompt技术:让LLM精准理解用户意图的进阶策略
  • JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)
  • 贝塞尔曲线原理
  • Android studio Could not move temporary workspace
  • 使用AI 生成PPT 最佳实践方案对比
  • ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式
  • window自带截图快捷键
  • C++学习:六个月从基础到就业——C++20:范围(Ranges)基础
  • 【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理
  • MLLM常见概念通俗解析(一)
  • 【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
  • 如何利用内网穿透实现Cursor对私有化部署大模型的跨网络访问实践
  • 【图像生成大模型】CogVideoX-5b:开启文本到视频生成的新纪元
  • lvs-dr部署
  • c++学习之--- list
  • C语言链表的操作
  • 数字人技术的核心:AI与动作捕捉的双引擎驱动(210)
  • defer关键字:延迟调用机制-《Go语言实战指南》