字符串函数(C)

写在前面:使用大部分的字符串函数都要包含string.h头文件

一、strlen()函数:该函数用于统计字符串的长度。

二、strcat()函数
1.函数原形:strcat(字符数组名/字符串指针,字符数组名/字符串指针/字符串常量)
2.用法:strcat()函数用于拼接字符串,函数接受两个字符串作为参数,把第2个字符串的备份附加在第1个字符串的末尾,并把拼接后形成的新字符串作为第1个字符串,第2个字符串不变;strcat()函数返回第1个参数,即拼接第2个字符串后的第1个字符串的首地址。
3.延伸:由于strcat()函数无法检查第1个数组是否能容纳第2个字符串而可能导致数组元素溢出问题,所以引入含有三个参数的strncat()函数,该函数的第3个参数指定了最大添加字符数

三、strcmp()函数
1.函数原形:strcmp(“string1”,“string2”)或strcmp(字符数组首地址,字符数组首地址/字符串常量);该函数比较所有的字符而不只是字母,根据字符的数值(通常使用ASCII值)进行比较。
2.返回值:strcmp()函数比较字符串(不是字符)的不同。如果比较的两个字符串完全相同,函数返回0;如果字母表中第1个字符串位于第2个字符串前面,strcmp()中就返回负数,反之则返回正数,具体的返回值根据编译系统而定。如:
strcmp(“A”,“A”) is 0
strcmp(“A”,“B”) is -1
strcmp(“B”,“A”) is 1
但大多数情况下,函数的具体返回值并不重要,我们只在意该值是0还是为0。
3.延伸:strncmp(字符串1,字符串2,指定比较的字符数)
该函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较第3个参数指定的字符数。示例代码如下:

#include<stdio.h>
#include<string.h>
#define LISTSIZE 6
int main()
{
	const char* list[LISISIZE]=
	{
		"astronomy","astounding","astrophysics","ostracize","asterism","astrophobia"
	};
	int count=0;
	for(int i=0;i<LISTSIZE;i++)
	{
		if(strcmp(list[i],"astro",5)==0)
		{
			printf("Found: %s\n",list[i]);
			count++;
		}
	}
	printf("The list contained %d words beginning with astro.\n",count);
	return 0;
}
/*程序输出:
Found: astronomy
Found: astrophysics
Found: astrophobia
The list contained 3 words beginning with astro.
*/

四、strcpy()函数
1.函数原形:strcpy(字符串指针1/字符数组名1,字符串指针2/字符数组名2/字符串常量)
2.说明:strcpy()第2个参数指向的字符串被拷贝至第1个参数指向的数组中,拷贝出来的字符串被称为目标字符串,最初的字符串称为源字符串。strcpy()的返回类型是char*,该函数返回的是第1个参数的值,即一个字符的地址,并且第1个参数不必指向数组的开始。如下的示例代码:

#include<stdio.h>
#include<string.h>
#define WORDS "beast"
#define SIZE 40
int main(void)
{
	const char* orig = WORDS;
	char copy[SIZE]="Be the best that you can be.";
	char * ps;
	puts(orig);
	puts(copy);
	ps=strcpy(copy+7,orig);
	puts(copy);
	puts(ps);
	return 0;
}
/*程序输出:
beast
Be the best you can be.
Be the beast
beast
}

3.延伸:使用三个参数的strncpy()函数更安全,该函数弥补了strcpy函数不能检查目标空间是否能容纳源字符串的副本的问题,它的第3个参数指明可拷贝的最大字符数

五、其他字符串函数(具体实现可上机操作)
1.char * strcpy(char* restrict s1, const char * restrict s2);
该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置,返回值是s1。

2.char * strncpy(char* restrict s1, const char * restrict s2, size_t n);
该函数把s2指向的字符串拷贝至s1指向的位置,拷贝的字符个数不超过n,其返回值是s1。该函数不会拷贝空字符后面的字符,如果源字符串的字符少于n个,目标字符串就以拷贝的空字符结尾;如果源字符串有n及以上个字符,就不拷贝空字符。

3.char *strcat(char * restrict s1, const char * restrict s2);
该函数把s2指向的字符串拷贝至s1指向的字符串末尾。s2字符串的第1个字符将覆盖s1字符串末尾的空字符。该函数返回s1。

4.char *strncat(char * restrict s1, const char * restrict s2, size_t n);
该函数把s2字符串中的n个字符拷贝至s1字符串末尾。s2字符串的第1个字符将覆盖s1字符串末尾的空字符。不会拷贝s2字符串中空字符和其后的字符,并在拷贝字符的末尾添加一个空字符。该函数返回s1。

5.int *strcmp(const char *s1, const char * s2);
如果s1字符串在机器排序序列中的后面,该函数返回一个正值;如果两个字符串相等,则返回0;如果s1字符串在机器排序序列中位于s2的前面,则返回一个负值。

6.int *strncmp(const char *s1, const char * s2, size_t n);
该函数的作用与strcmp()类似,不同的是,该函数在比较n个字符后或遇到第1个字符时停止比较。

7.char *strchr(const char *s, int c);
如果s字符串中包含字符c,该函数返回指向s字符串首地址的指针(末尾的空字符也是字符串的一部分,所以在查找范围内);如果字符串s中未找到c字符,则返回空指针。

8.char *strpbrk(const char * s1,const char * s2);
如果s1字符串中包含s2字符串中的任意字符,该函数返回指向s1字符串首地址的指针;如果在s1字符串中未找到任何s2字符串中的字符,则返回空字符。

9.char *strrchr(const char * s, int c);
该函数返回s字符串中c字符的最后一次出现的位置(末尾的空字符也是字符串的一部分,所以在查找范围内)。如果未找到c字符,则返回空指针。

10.char *strstr(const char * s1, const char * s2);
该函数返回指向s1字符串中s2字符串出现的首位置。如果在s1中没有找到s2,则返回空指针。

11.size_t strlen(const char * s);
该函数返回s字符串中的字符数,不包括末尾的空字符

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LG.田猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值