【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数

1.gets函数与puts函数

gets函数类似于scanf函数,用于读取标准输入.前面我们已经知道scanf函数在读取字符串时遇到空格就认为读取结束,所以当输入的字符串存在空格时,我们需要使用gets 函数进行读取.

gets函数的格式如下:

c 复制代码
char *gets(char *str);

gets函数从STDIN (标准输入)读取字符并把它们加载到str(字符串)中,直到遇到换行符(\n) .如下例所示,执行后,我们输入"how are you",共11个字符,可以看到gets 会读取空格,同时可以看到我们并未给数组进行初始化赋值,但是最后有'\0',这是因为gets遇到\n后,不会存储\n,而是将其翻译为空字符'\0'.

puts函数类似于printf函数,用于输出标准输出.puts函数的格式如下:

c 复制代码
int puts(char *str);

函数 puts把 str(字符串)写入STDOU(标准输出). puts会将数组c中存储的"how are you"字符串打印到屏幕上,同时打印换行,相对于printf函数, puts只能用于输出字符串,同时多打印一个换行符,等价于printf(%sin",c).

c 复制代码
#include <stdio.h>
//gets一次读取一行
int main()
{
	char c[20l;
	gets(c);
	puts(c);
	return 0;
}

执行结果如图:

c 复制代码
how are you
how are you

2 str系列字符串操作函数(初试没那么重要,对于机试更重要一些)

str系列字符串操作函数主要包括strlen. strcpy. strcmp、strcat等. strlen函数用于统计字符串长度, strcpy函数用于将某个字符串复制到字符数组中, strcmp函数用于比较两个字符串的大小,strcat 函数用于将两个字符串连接到一起.各个函数的具体格式如下所示:

c 复制代码
#include <string.h>
size_t strlen(char *str);
char *strcpy(char *to, const char *from);
int strcmp(const char *str1, const char *str2);
char *strcat(char *str1, const char *str2);

对于传参类型char*,直接放入字符数组的数组名即可.

接下来我们通过下例来具体学习str系列字符串操作函数,掌握每个函数的内部实现.

【例】str系列字符串操作函数的使用.

c 复制代码
#include <stdlo.h>
#include <string.h>

int mystrlen(char c[]){
int i = O;
while (c[i++]);
return i -1;

}

/ / strlen统计字符串长度
int main() {
int len;//用于存储字符串长度
char c[20];
char d[100] = "world";
gets(c);
puts(c);
len = strlen(c);
printf("len=%d\n",len);
len = mystrlen(c);
printf( "mystrlen len=%din", len);
strcat(c, d);
strcpy(d, c);//c中的字符串复制给d
puts(d);
printf("c?d %din", strcmp(c, d));
puts(c);
return O;
}

下图所示为我们输入"hello"后的执行结果,通过strlen 函数计算的字符串长度为5,我们自己写的函数就是strlen函数的计算原理,即通过判断结束符来确定字符串的长度.

strcpy函数用来将字符串中的字符逐个地赋值给目标字符数组.例中我们将c复制给d,就是将c中的每个字符依次赋值给d,也会将结束符赋值给d.注意,目标数组一定要大于字符串大小,即sizeof(d)>strlen©,否则会造成访问越界.

c 复制代码
hello
hellolen=5
mystrlen len=5
helloworld
c?d 0
helloworld

strcmp函数用来比较两个字符串的大小,由于字符数组c中的字符串与d相等,所以这里的返回值为0,如果c中的字符串大于d,那么返回值为1;如果c中的字符串小于d,那么返回值为-1,如何比较两个字符串的大小呢?具体操作是从头开始,比较相同位置字符的ASCII码值,若发现不相等则直接返回,否则接着往后比较.例如,strcmp("hello" ," how")的返回值是-1,即""hello"小于"how",因为第一个字符h相等,接着比较第二个位置的字符, e的ASCII码值小于o的,然后返回-1.

strcat函数用来将一个字符串接到另外一个字符串的末尾.例中字符数组c中存储的是

"hello",我们将d中的"world"与c拼接,最终结果为"helloworld"。注意,目标数组必须大于拼接后的字符串大小,即sizeof©>strlen("helloworld").

相关推荐
Myli_ing15 分钟前
考研倒计时-配色+1
前端·javascript·考研
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
.Cnn2 小时前
用邻接矩阵实现图的深度优先遍历
c语言·数据结构·算法·深度优先·图论
2401_858286112 小时前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
寻找码源3 小时前
【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
c语言·数据结构·算法·字符串·kmp
带多刺的玫瑰5 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
陌小呆^O^5 小时前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
时光の尘6 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
-一杯为品-6 小时前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
爱摸鱼的孔乙己7 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn