C语言基础知识(1):字符串操作

        C语言是一种非常流行的编程语言,它支持各种数据类型,包括整数、浮点数、字符和字符串等。在 C语言中,字符串是一种特殊的数据类型,它由一系列字符组成,以\0字符结尾。本文将介绍 C语言中字符串的相关知识,包括字符串的定义、初始化、赋值、输入输出、比较、拼接、查找和替换等。

1.字符串操作
strcpy(p, p1) 复制字符串
strncpy(p, p1, n) 复制指定长度字符串
strcat(p, p1) 附加字符串
strncat(p, p1, n) 附加指定长度字符串
strlen(p) 取字符串长度
strcmp(p, p1) 比较字符串
strcasecmp(p, p1)忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串
strchr(p, c) 在字符串中查找指定字符
strrchr(p, c) 在字符串中反向查找
strstr(p, p1) 查找字符串
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素
strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移
strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移

具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符

2.字符串到数值类型的转换
strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。
strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型
atoi(p) 字符串转换到 int 整型
atof(p) 字符串转换到 double 符点数
atol(p) 字符串转换到 long 整型
3.字符检查
isalpha() 检查是否为字母字符
isupper() 检查是否为大写字母字符
islower() 检查是否为小写字母字符
isdigit() 检查是否为数字
isxdigit() 检查是否为十六进制数字表示的有效字符
isspace() 检查是否为空格类型字符
iscntrl() 检查是否为控制字符
ispunct() 检查是否为标点符号
isalnum() 检查是否为字母和数字
isprint() 检查是否是可打印字符
isgraph() 检查是否是图形字符,等效于 isalnum() | ispunct()
4.示例

(1)strstr()查找字符串

#include "head.h" 
//C语言中,strstr()函数用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中。 
//char *strstr(const char *str1, const char *str2) 
//str1是总串,str2是需要匹配的第一个字串位置,返回值为char * 类型。 
int main() 
{ 
    char buf1[100],buf2[100]; 
    scanf("%s",buf1); 
    scanf("%s",buf2); 
    char *s=strstr(buf1,buf2); 
    printf("%s\n",s); return 0; 
}

(2)strlen()获取字符串长度

#include "head.h"
int main()
{
//strlen函数返回的是在字符串中’\0’前面出现的字符的个数
	char buf[100];
	scanf("%s",buf);
	printf("%ld\n",strlen(buf));
	return 0;
}

(3)strcpy()覆盖字符串

#include "head.h"
int main()
{
	//char *strcpy(char *destination,const char *source)
	//strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够
	//(destination的空间必须>=source的空间)
	
	char buf1[100],buf2[100];
	scanf("%s",buf1);
	strcpy(buf2,buf1);
	printf("%s\n",buf2);
	return 0;
}

(4)strcat()追加字符串

#include "head.h"
int main()
{
	char *strcat(char *destination,const char *source)
	//strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容
	
	char buf1[100],buf2[100];
	scanf("%s",buf1);
	scanf("%s",buf2);
	
	strcat(buf1,buf2);
	printf("%s\n",buf1);
	return 0;
}

(5)strcmp()比较字符串

#include "head.h"
int main()
{
	//strcmp(const char *s1,const char *s2)
	//strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
	//标准规定:
	//第一个字符串大于第二个字符串,则返回大于0的数字
	//第一个字符串等于第二个字符串,则返回0
	//第一个字符串小于第二个字符串,则返回小于0的数字
	
	char buf1[100],buf2[100];
	scanf("%s",buf1);
	scanf("%s",buf2);
	
	printf("%d\n",strcmp(buf1,buf2));
	return 0;
}

(6)strdup()拷贝字符串

#include "head.h"
int main()
{
	//char *strdup(const char *s);
	/*
	strdup()函数主要是拷贝字符串s的一个副本,由函数返回值返回,
	这个副本有自己的内存空间,和s没有关联。strdup函数复制一个字符
	串,使用完后,要使用delete函数删除在函数中动态申请的内存,
	strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该
	函数包括了strlen函数,而该函数参数不能是NULL。
	*/
	
	char buf1[100];
	scanf("%s",buf1);
	
	char *s=strdup(buf1);
	printf("%s\n",s);
	
	free(s);
	return 0;
}

(7)strtok()分割字符串

#include "head.h"
int main()
{
	//第一次使用时第一个参数传入待分割的字符串,第二个参数传入分割符号。
	//第二次使用时第一个函数传入NULL,第二个参数传入分割符号。
	char buf[100];
	char *str;
	scanf("%s",buf);
	str=strtok(buf,"1");
	while(str!=NULL){
		printf("%s\n",str);
		str=strtok(NULL,"1");
	}
	
	return 0;
}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值