C语言常见字符串操作

1、获取字符串长度

头文件:#include<string.h>
函数的定义:size_t strlen(const char *s)
函数功能:
测字符指针s指向的字符串中字符的个数,不包括"\0"
返回值:字符串中字符个数

int main(int argc, char *argv[])
{
	//使用strlen函数获取字符串的长度
	//注意:遇到\0时结束
	char S1[20] = "hello";
	
	printf("S1_len = %d\n",strlen(S1));
	//使用sizeof函数获取数组内存长度
	printf("S1_size = %d\n",sizeof(S1));
	
	return 0;
}

执行结果

S1_len = 5
S1_size = 20

2、字符串拷贝函数

头文件:#include<string.h>
函数的定义:char *strcpy(char *dest, const char *src)
函数说明:
拷贝src指向的字符串到dest指针指向的内存中,"\0"也会拷贝
函数的返回值:
目的内存的地址
注意:在使用次函数的时候,必须保证dest指向的内存空间足够大,否则会出现内存污染

函数的定义:char *strncpy(char *dest, const char *src,size_t n)
函数的说明:
将src指向的字符串前n个字节,拷贝到dest指向的内存中
返回值:
目的内存的首地址
注意:
1、strcpy不拷贝"\0"
2、如果n大于src指向的字符串中的字符个数,则在dest后面填充n-strlen(src)个"\0"

int main(int argc, char *argv[])
{
	//使用strcpy函数拷贝字符串
	char S1[20] = "hello";
	char S2[20] = "world";

	strcpy(S1,S2);
	printf("S1 = %d\n",S1);
	
	return 0;
}

执行结果

S1 = world

3、字符串追加函数

头文件:#include<string.h>
函数定义: char *strcat(char *dest,const char *src)
函数功能:
strcat函数追加src字符串到dest指向的字符串的后面。追加的时候会追加"\0"
注意:保证dest指向的内存空间足够大

函数定义: char *strncat(char *dest,const char *src,size_t n)
函数功能:
追加src指向的字符串的前n个字符,到dest指向的字符串的后面
注意:
如果n大于src的字符个数,则只将src字符串追加到dest指向的字符串的后面,追加的时候会追加"\0"

int main(int argc, char *argv[])
{
	//使用strcat函数追加字符串
	char S1[20] = "hello";
	char S2[20] = "world";

	//strcat是从S1的\0的位置追加,直到S2的\0复制完毕后结束
	strcat(S1,S2);
	printf("S1 = %d\n",S1);
	
	return 0;
}

执行结果

S1 = helloworld

4、字符串比较函数

头文件:#include<string.h>
函数定义:int strcmp(const char *S1,const char *S2)
函数说明:
比较S1和S2指向的字符串的大小
比较的方法:逐个字符去比较ascll码,一旦比较出大小则返回。如果所有字符都一样,则返回0
返回值:
如果S1指向的字符串大于S2指向的字符串 返回1
如果S1指向的字符串小于S2指向的字符串 返回-1
如果相等的话返回0

函数定义:int strncmp(const char *s1,const char *s2,size_t n)
函数说明:比较S1和S2指向的字符串的前n个字符

int main(int argc, char *argv[])
{
	char S1[] = "hello";
	char S2[] = "world";

	int ret = strcmp(S1,S2);
	if(ret == 0)
	{
		printf("S1 = S2\n");
	}
	else if(ret > 0)
	{
		printf("S1 > S2\n");
	}
	else
	{
		printf("S1 < S2\n");
	}
	
	return 0;
}

执行结果

S1 < S2

5、字符查找函数

头文件:#include<string.h>
函数定义:char *strchr(const char *s,int c)
函数说明:
在字符指针s指向的字符串中,找到ascll码为c的字符
注意:是首次匹配,如果说s指向的字符串中有多个ASCLL为c的字符,则找的是第1个字符
返回值:
找到了返回找到的字符的地址
找不到返回NULL

函数定义:char *strrchr(const char *s,int c)
函数的说明:末次匹配
在s指向的字符串中,找最后一次出现的ASCLL为c的字符
返回值:
末次匹配的字符的地址

int main(int argc, char *argv[])
{
	//使用strcat函数追加字符串
	char S[] = "helloj worldj";
	char *ret = strchr(S,'j');
	
	if(ret == NULL)
	{
		printf("没有\n");
	}
	else
	{
		printf("在第%d个位置\n",ret - S);
	}
	
	return 0;
}

执行结果

在第5个位置

6、字符串匹配函数

头文件:#include<string.h>
函数定义:char *strstr(const char *haystack,const char *needle)
函数说明:
在haystack指向的字符串中查找needle指向的字符串,也是首次匹配
返回值:
找到了:返回的字符串的首地址
没找到:返回NULL

int main(int argc, char *argv[])
{
	//使用strstr函数在一个字符串中查找另一个字符串
	char S[] = "123456789";
	char *ret = strstr(S,"56");
	if(ret == NULL)
	{
		printf("没找到\n");
	}
	else
	{
		printf("在第%d个位置\n",ret - S);
	}
	
	return 0;
}

执行结果

在第4个位置

7、字符串转换数值

atoi/atol/atof
头文件:#include<stdlib.h>
函数的定义:int atoi(const char *nptr)
函数的功能:
将nptr指向的字符串转换成整数,返回

int main(int argc, char *argv[])
{
	//使用atoi将数字型字符串转化为整形数据
	char S[] = "123456789";
	int *ret = atoi(S);
	
	printf("ret = %d\n",ret);
	
	return 0;
}

执行结果

ret = 123456789

8、字符串切割函数

头文件:#include<string.h>
函数定义:char *strtok(char *str,const char *delim)
函数功能:
字符串切割,按照delim指向的字符串中的字符,切割str指向的字符串。其实就是在str指向的字符串中发现了delim字符串中的字符,就将其变成"\0",调用一次strtok只切割一次,切割一次之后,再去切割的时候strtok的第一个参数传NULL,意思是接着上次切割的位置继续切

注意:如果str字符串中出现了连续的几个delim中的字符,则只将第一个字符变成"\0"

int main(int argc, char *argv[])
{
	//使用strtok函数切割字符串
	char S[] = "123:456:789";
	char *ret;
	ret = strtok(S,":")
	
	printf("ret = %s\n",ret);
	
	return 0;
}

执行结果

ret = 123

9、格式化字符串操作函数

int sprintf(char *buf,const char *format,…) //输出到buf指定的内存区域
int sscanf(const char *buf,const char *format,…)

int main(int argc, char *argv[])
{
	//sprintf和sscanf的基本用法
	char buf[20];
	int a,b,c;

	sprintf(buf,"%d:%d:%d",2020,9,9);
	printf("buf = %s\n",buf);

	sscanf("2020:9:9","%d:%d:%d",&a,&b,&c);
	printf("a = %d,b = %d,c = %d\n",a,b,c);
	
	return 0;
}

执行结果

buf = 2020:9:9
a = 2020,b = 9,c = 9

10、const

(1) 修饰普通变量,代表只读的意思
const int a = 100;//定义了一个只读变量a值为100
以后程序中,不能再给a赋值

(2) const 修饰指针
const char *str
意思是str指向的内存的内容不能通过str来修饰
用来保护str指向的内存的内容
但是str的指向是可以改变的
char *strcpy(char *dest,const char *str)

如果const修饰指针变量的类型,无法通过指针变量修改地址里面的值 const int * p
如果const修饰指针变量,无法修改指针变量保存的地址 int * const p
如果const既修饰指针变量的类型,又修饰指针变量,则只能通过原本修改值 const int * const p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT自习小空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值