C Programming学习笔记【谭浩强老师编】(第六章利用数据批量处理数据)03 使用字符串处理函数

在这里插入图片描述



一、使用字符串处理函数

1.输出字符串的函数

puts(字符数组)

作用:将一个字符串(以′\0′结束的字符序列)输出到终端。
用puts函数输出的字符串中可以包含转义字符。
在用puts输出时将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。

#include <stdio.h>
int main()
{
	char str[]={"China\nBeijing"};
	puts(str);
	return 0;
}

在这里插入图片描述

2.输入字符串的函数

gets(字符数组)

作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。

gets(str); //str是已定义的字符数组

如果从键盘输入:
Computer↙
将输入的字符串″Computer″送给字符数组str(请注意,送给数组的共有9个字符,而不是8个字符),返回的函数值是字符数组str的第一个元素的地址。
在这里插入图片描述

3.字符串连接函数

strcat(字符数组1, 字符数组2)
作用:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
字符数组1必须足够大,以便容纳连接后的新字符串。
连接前两个字符串的后面都有′\0′,连接时将字符串1后面的′\0′取消,只在新串最后保留′\0′。

char str1[30]={"People′s Republic of "};
char str2[]={"China"};
printf("%s", strcat(str1, str2));

在这里插入图片描述

4.字符串复制函数

strcpy(字符数组1, 字符串2)
作用:将字符串2复制到字符数组1中去。
字符数组1必须定义得足够大,以便容纳被复制的字符串2。字符数组1的长度不应小于字符串2的长度。
“字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以是一个字符串常量。
若在复制前未对字符数组1初始化或赋值,则其各字节中的内容无法预知,复制时将字符串2和其后的′\0′一起复制到字符数组1中,取代字符数组1中前面的字符,未被取代的字符保持原有内容。
不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符数组名是一个地址常量,它不能改变值,正如数值型数组名不能被赋值一样。
可以用strcpy函数将字符串2中前面n个字符复制到字符数组1中去。
将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符。但复制的字符个数n不应多于str1中原有的字符(不包括′\0′)。

char str1[10], str2[]="China";
strcpy(str1, str2);strcpy(str1, "China");

5.字符串比较函数
strcmp(字符串1, 字符串2)
作用:比较字符串1和字符串2。
字符串比较的规则是: 将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。
(1) 如全部字符相同,则认为两个字符串相等;
(2) 若出现不相同的字符,则以第1对不相同的字符的比较结果为准。
比较的结果由函数值带回。
(1) 如果字符串1与字符串2相同,则函数值为0。
(2) 如果字符串1>字符串2,则函数值为一个正整数。
(3) 如果字符串1<字符串2,则函数值为一个负整数。

strcmp(str1, str2);
strcmp("China", "Korea");
strcmp(str1, "Beijing");

在这里插入图片描述

5.测字符串长度的函数

strlen(字符数组)
作用:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。

#include <stdio.h>
#include <string.h>
int main()
{
	char str[10]="China";
	printf("%d,%d\n",strlen(str),strlen("China"));	
}

在这里插入图片描述

6.转换为大小写的函数

strlwr(字符串)
作用:将字符串中大写字母换成小写字母。

strupr(字符串)
作用:将字符串中小写字母换成大写字母。
在这里插入图片描述

二、字符数组应用举例

1.有3个字符串,要求找出其中“最大”者。

在这里插入图片描述在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char str[3][20];	//定义二维字符数组
	char string[20];	
	//定义一维字符数组,作为交换字符串时的临时字符数组
	int i;
	for(i=0;i<3;i++)
		gets(str[i]);	//读入3个字符串,分别给str[0],str[1],str[2]
	if(strcmp(str[0],str[1])>0)	//若str[0]大于str[1]
		strcpy(string,str[0]);	//把str[0]的字符串赋给字符数组string
	else						//若str[0]小于等于str[1]
		strcpy(string,str[1]);	//把str[1]的字符串赋给字符数组string 
	if(strcmp(str[2],string)>0)	//若str[2]大于string
		strcpy(string,str[2]);	//把str[2]的字符串赋给字符数组string
	printf("\nthe largest string is:\n%s\n",string);		//输出string
	return 0;
}

(1) 流程图和程序注释中的“大于”是指两个字符串的比较中的“大于”。
(2) str[0],str[1],str[2]和string是一维字符数组,其中可以存放一个字符串。
(3) strcpy函数在将str[0],str[1]或str[2]复制到string时,最后都有一个′\0′。因此,最后用%s格式输出string时,遇到string中第一个′\0′即结束输出,并不是把string中的全部字符输出。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值