字符串的相关操作运算

字符串作为c语言中一种特殊的存在,是一种特殊类型的数组,他的组成元素类型为 char。以’\0’作为结束标志。所以我们不能直接对字符串进行直接的输入与输出。
其中带单引号的称为字符常量,带有双引号的称为字符串常量,字符串常量常常以’\0’作为结束标志,这就意味着我们在c语言中对字符串的使用中往往要注意’\0’这个标志,一旦在字符串中出现’\0’,那么在’\0’后有多少字符,都不会进行后续的输出。('\0’后的字符也不会在计算字符串长度时被计算进去。)

字符的输入与输出

字符的输入

由于在c语言中并没有字符串相关的数据类型,所以我们再进行字符串的输出前需要我们定义一个字符类型的数组,借数组来进行字符串的输入才能实现字符串的输出。字符串的输入有以下几种方法:
%c一字符的形式进行输入
%s以字符串的格式进行输入

  1. scanf(“%c”,&ch) ——>输入键盘输入一个字符
    scanf(%s",ch)——>输入键盘输入字符串

  2. ch = getchar()——>输入键盘输入一个字符

    tips:在字符的输入中,空格、换行(\n)、tab(缩进)都是字符,getchar()我们常常用于接走多余字符,或使用%c忽略掉以上字符。

  3. gets()——>输入键盘输入的字符串

tips:scanf()与gets()的区别:scanf()时以空格和回车(\n)作为标志结束的,而gets()是以遇到(\n)作为标志结束的。所以如果我们要读入一个带空格符的字符串时因该用gets(), 而不宜用scanf()。

字符的输出

字符的输出与输入一样,有以下几种方法:

  1. printf(“%c”,ch)——>输出一个字符
    printf(“%s”,str)—— > 输出一个字符串
  2. putchar()——>输出一个字符
  3. puts()——>输出一个字符串
    tips:printf()和puts()的区别:puts()会自动输入(\n),printf()需要手动输入(\n)。

在字符的输入与输出中,由于在c语言中没有字符串的数据类型,所以我们每次都需要在字符的输入输出前定义一个字符型的数组。例如:char str[] = {0};

字符串的处理函数

只要我们需要在代码中实现对字符进行数据处理,那么我们都要在代码的开始引入预命令(头文件):#include <string.h>。

计算字符串长度、

对于字符串所占数据长度的计算有以下三种方式,分别为:

  1. sizeof()
    使用方法:sizeof(str)——其中的str为定义过的字符型数组。
    sizeof()不是一个函数,它是一个运算符,作用为计算一个数据类型的大小,他的类型可以是数组、函数、指针、对象等,单位为字节。
  2. strlen()
    使用方法:strlen(字符串/字符串数组)。
    strlen()的功能是计算一个指定字符串的长度,由于它是一个函数,所以需要包含头文件(#include <string.h>)。

tips:二者的区别在于
1.sizeof()会将空字符(\0)计算在内,而strlen()不会将空字符(\0)计算在内。
2. sizeof()会计算到字符串的最后一个空字符(\0)才会结束,而strlen()遇到第一个空字符(\0)的话就会停止并计算遇到第一个空字符(\0)前的字符的长度(不包含空字符)。
举例:当定义数组 char str[10]={0};时,不论后来在str数组中输入任何数据,用sizeof(str)我们都会得到10的结果,而strlen(str)会输出我们输入的字符串长度(输入字符低于10的情况)

字符的拼接

当我们需要将输入的两个字符进行拼接组合时,我们可以用到以下两种函数:

  1. strcat()
    使用方法:strcat(目标字符串/字符数组,源字符串/字符数组);
    strcat()是将目标字符串的最后一个字符(\n)替换为源字符串的开头第一个字符。
  2. strncat()
    使用方法:strncat(目标字符串/字符数组,源字符串/字符数组,n)
    作用是将源字符串/字符数组的前n个字符拼接到目标字符串/字符数组的结尾,并添加\0结束。

tips:strcat()与strncat()都无法进行字符串是否越界进行检查,所以我们在使用过程中应该进行越界判断,防止其溢出。
例子:对字符串拼接时的溢出检查。

#include <stdio.h>
#include <string.h>
//#define n 3
int main(void)
{
	char str1[10] = {0};
	char str2[10] = {0};	//定义两个字符数组
	int n = strlen(str1);
	scanf("%s\n",&str1);
	scanf("%s\n",&str2);
	strcat(str1,str2);		//strncat(str1,str2,n)
	if(strlen(str2) + 1 > sizeof(str1) )
	//if(strlen(str2) + 1 + n > sizeof(str1));
	{
		printf("str2与str1拼接后的长度溢出\n");
		return -1;
	} 
	puts(str1);
	printf("str1的长度为:%ld",n);
	return 0;
}

字符串的拷贝

当我们需要将一个字符串拷贝到另一个字符串时,我们需要用到以下两个函数:

  1. strcpy()
    使用方法:strcpy(目的字符数组/字符串,源字符数组/字符串);
    作用是将源字符数组/字符串中的元素拷贝到目的字符数组/字符串。(将目的字符数组/字符串完全覆盖。同时也将(\0),输入进去,如果输入时’\0’后仍有字符,则’\0’后的字符不会拷贝到目的字符数组/字符串中)。
  2. strncpy()
    使用方法:strncpy(目的字符数组/字符串,源字符数组/字符串);
    作用是将源字符数组/字符串的前n个字符拷贝到目的字符数组/字符中(后边带有’\0’)。

tips:strcpy()与strncpy()都无法进行字符串是否越界进行检查,所以我们在使用过程中应该进行越界判断,防止其溢出。
例子:对字符数组进行拷贝时的溢出检查。

#include <stdio.h>
#include <string.h>
//#define n 3
int main(void)
{
	char str1[10] = {0};
	char str2[100] = {0};	//定义两个字符数组
	scanf("%s\n",&str1);
	scanf("%s\n",&str2);
    strcpy(str1,str2);	 	//strncpy(str1,str2,n);
	if(strlen(str2) > sizeof(str1))
	//if(n + 1 > sizeof(str1))
	{
		printf("str2拷贝至str1后的长度溢出\n");
		return -1;
	}
	puts(str1);
	printf("str1的长度为:%ld",strlen(str1));
	return 0;
}

tips:若想让其输出溢出,那么此时str2数组的元素数量应该设的量大于str1,若没有设置str2的值大于str1,那么数组中元素的个数溢出str2,无法显示结果。

字符串的比较

字符串的比较是比较字符串的大小,比较的是两个字符串从左至右依次比较其ASCII码的大小(与字符串的长短无关),直到出现不同的字符或遇’\0’为止。
在比较字符串的大小时,我们会用到以下两种函数:

  1. strcmp()
    使用方法:strcmp(字符数组1/字符串1,字符数组/字符串2);
    判断结果输出值为返回值,我们需要对返回值进行判断:
    大于0—>字符串1 > 字符串2
    小于0—>字符串1 < 字符串2
    等于0—>字符串1 == 字符串2
    功能为将字符串2的字符的ASCII码值从左至右依次与字符串2进行比较。直到出现不同的字符或遇’\0’为止。
  2. strncmp()
    使用方法:strncmp(字符数组1/字符串1,字符数组/字符串2,n);判断结果同样为返回值,需要对返回值进行判断。
    功能为将字符串2的前n个字符的ASCII码值从左至右依次与字符串2进行比较。直到出现不同的字符或遇’\0’为止。

tips:strcmp()与strncmp()都无法进行字符串是否越界进行检查,所以我们在使用过程中应该进行越界判断,防止其溢出。
例子:对字符数组进行比较时的溢出检查。

#include <stdio.h>
#include <string.h>
//#define n 3
int main(void)
{
	char str1[10] = {0};
	char str2[100] = {0};//定义两个字符数组
	scanf("%s\n",&str1);
	scanf("%s\n",&str2);//strncmp(str1,str2,n);
	int A = strcmp(str1,str2);//strncmp(str1,str2,n)
	if(A > 0)
	{
	    printf("str1 > str2\n");
	}
	else if(A < 0)
    {
        printf("str1 < str2\n");
    }
	else
    {
        printf("str1 = str2\n");
    }
	printf("str1的长度为:%ld",strlen(str1));
	return 0;
}

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值