首页 > 其他分享 >字符函数和字符串函数

字符函数和字符串函数

时间:2024-09-28 18:53:36浏览次数:9  
标签:字符 函数 int char 字符串 size

字符函数和字符串函数

字符分类函数

大家知道字符是分为很多种类型的
就比如说’a’ ‘1’ 'A’等等,所以我们需要一种函数来完成字符函数的分类
这就是字符分类函数

函数需要包含头文件<ctype.h>

函数的运行规则是:如果符合下列参数就返回真

  • inscntrl(控制任何字节)
  • isspace(空白字符:空格,\f,\n,\r,\t,\v)
  • isdigit(十进制数字’0’~'9’字符)
  • isxdigit(十六进制数字,包括十进制狮子字符,小写字母a~f,大写字母A到F)
  • islower(小写字母a~z)
  • isupper(大写字母A~Z)
  • isalnum(字母或者数字)
  • ispunct(标点符号,任何不属于数字或者字母的图形字符)
  • isgraph(任何图形字符)
  • isprint(任何可以打印字符,包括图形字符和空白字符)

我们该怎么使用这些函数呢?

int isupper(int c )

函数就是判断参数部分的c是否是大写字母
如果是大写字母,就返回非零的整数,如果不是大写,则返回0

字符转换函数

什么是字符转换函数呢?

就是可以将字符之间完成转换

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

细讲strlen函数

之前我们了解过strlen函数,是用来统计字符个数的

现在我们来细讲一下

strlen函数的形式

size_t strlen(const char *str);

就是说返回值是size_t,如果我们想储存他的结果,就是需要size_t类型的变量来储存值得注意的是size_t是无符号的,就是没有正负之分

我们来模拟一下strlen函数,更好的理解他

#include <stdio.h>
size_t m_strlen(char *p)
{
	size_t con = 0;
	while (*p)
	{
		p++;
		con++;
		
	}return con;


}
int main()
{
	char arr[6] = "abcde";
		size_t a = m_strlen(arr);
		printf("%zd", a);


	return 0;
}

strcpy

strcpy就是将源字符串中的代码拷贝到目标字符串

char * strcpy(char *p,const char * pp);

其中,p是目标字符串,pp是源字符串

运行过程是:strcpy将目标字符串与原字符串一一替换,直到替换到源字符串的/0部分
前提条件是目标函数的容量一定要足够大,起码要放的下源字符串

那就模拟一下strcpy函数

#include<stdio.h>
void m_strcpy(char* p, char* pp)
{
	while (*p = *pp)
	{
		*p++;
		*pp++;
		if (*pp == '\0')
		{
			//for循环一个字符打印后面的字符
			break;
		}
	}



}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "efg";
	m_strcpy(arr1, arr2);
	printf("%s", arr1);


	return 0;
}

strcat

strcat函数的用法是:将源函数追加到目标函数后面。细节如下:

  • 源字符串必须以\0结尾,因为追加的时候目标函数的\0会被取代,如果没有则追加后的函数将没有\0
  • 目标字符也必须有\0,因为如果没有就不知道从哪里追加
  • 目标函数的空间必须足够大,不然会溢出

那我们就再模拟一下strcat函数:

#include<stdio.h>
void m_strcat(char* a, char* b)
{
	char** p = b;
	while (*a != '\0')
	{
		a++;
	}
	while (*b != '\0')
	{
		*a = *b;
		a++;
		b++;
	}
	*++a = *++b;
}
int main()
{
	char arr1[10] = "abcd";
	char arr2[] = "aaa";
	m_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

strcmp

strcmp就是将两个字符串中的每个字符进行比较

  • 如果第一个字符串大于第二个字符串,则返回大于零的数字
  • 第一个字符串等于第二个字符串,则返回零
  • 第一个字符串小于第二个字符串,则返回小于零的数字

而判断两个字符串的大小是相同位置的ASCII码值,将两个字符串同位置的字符一个一个的比较,直到比较出不相同的一个字符,如果都相同,那么返回0

strn系列

其实字符函数还有strncpy,strncat,strncmp,他们与前面说的strcpy,strcat,strcmp都有一点的不同,那么不同的点是什么呢?
那就是在传参时,后面要多加一个size_t num

  • strncpy:char * strncpy ( char * destination, const char * source, size_t num );
  • strncat :char * strncat ( char * destination, const char * source, size_t num );
  • strncmp:int strncmp ( const char * str1, const char * str2, size_t num );

后面的size_t num的意思都是,最多操作多少个字符

假如说strncpy的后面传参的num是3,意思是只3拷贝3个字符,其他的函数的意思也基本一致。

strtok函数

strtok函数起摘取作用,就是将一个字符串中用特定字符串分割的函数将分割的部分都摘取出来
strtok的表现形式

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

实参sep指向了一个字符串,定义了分割字符的集合


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

标签:字符,函数,int,char,字符串,size
From: https://blog.csdn.net/yttandb/article/details/142001860

相关文章

  • 9041 影子字符
    又开更了描述输入一个只由小写字母组成的字符串,其中有可能会有重复的字符,而我们认为在字符串中重复的字符都是影子字符。例如字符串 "abbc",字符 b 为影子字符。现在要求把字符串中所有的非影子字符都按照字母顺序依次输出。输入描述1行,一个字符串,不包含空格,字符串长度......
  • 字符串的增删改查
    一.增:增加元素方法一:使用"+"/"*"语法格式:"字符串1"+字符串"2"*数值... 注:以下例子以两个元素进行举例,当使用"+"对两个字符串进行拼接时,注意:此时拼接出的新字符串中间是没有空格的.字符串与字符串直接没有"*"这个方法a='李二牛'b='王艳兵'c=a+bprint(c)......
  • Day4 C++(运算符重载,模板与容器)(友元函数,运算符重载,赋值运算符,string字符串类,模板)
    1.友元friend1.1概念(掌握)定义:类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的成员,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全......
  • 你还在开发传统单片机?让单片机用上字符设备驱动!
    本文章为作者原创,未经允许严禁转载。在刚开始学习单片机的时候,我就想过,当驱动、功能越来越多了应该怎么管理。不同的设备需要不同的函数进行操作,在刚开始我还不太会设计软件架构,当设备功能的数量达到数十个时,代码维护难度就达到了灾难级别。在读大二后,我开始使用freertos并搭配st......
  • APP逆向实战:喜马拉雅(OLLVM混淆,字符串加密)
    喜马拉雅抓包:POST/mobile/login/pwd/v3HTTP/1.1Cookie:1&_device=android&fcecf4c4-5ddc-30e3-86b1-6e675f92bfd0&6.6.99;channel=and-f5;impl=com.ximalaya.ting.android;osversion=29;fp=009527657x2022q22564v0500000000000000000000000000000000000000;devic......
  • rust-BufReader逐字符读取
    BufReader有一个fill_buf的方法:fnfill_buf(&mutself)->Result<&[u8]>它可以返回它的内部buffer,如果buffer是空的,就填入更多数据再返回。这样我们就可以逐个读取其内部buffer的字符,且不需要额外申请空间了。通过fill_buf返回的buffer处理完了一些数据之后,可以通过consume来......
  • sha256sum文件哈希值和直接哈希字符串的哈希值不一样
    例如在文件test.txt里写入test没有换行。然后sha256sumtest.txt出来的结果是f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2test.txt但是在这个网站上http://encode.chahuo.com/输入test,然后以sha256方式哈希得到的结果是9f86d081884c7d659a2......
  • Go五种字符串的拼接
    +funcmain(){s1:="hello"s2:="word"s3:=s1+s2fmt.Print(s3)//s3="helloword"}sprintfs1:="hello"s2:="word"s3:=fmt.Sprintf("%s%s",s1,s2)//s3="hell......
  • 要求实现一个函数 DoubleToStr(double a,int b,char * str),将参数 a 转化为字符串 str
    sprintf函数:sprintf(str,"%.*f",b,a);:sprintf是一个格式化输出函数,类似于printf,但它将输出写入到字符串中而不是标准输出。"%.*f":#include<stdio.h>//将双精度浮点数a转换为字符串str,小数点后保留b位voidDoubleToStr(doublea,intb,char*str){  //......
  • Ini文件读写配置工具类 - C#小函数类推荐
          此文记录的是INI文件的读写工具类。/***Ini文件读写配置工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00使用说明:......