Linux自学day7-字符型一维数组

图中给出了三种输入字符串的方式

方式一:使用printf函数,通过%c格式符逐个输出str数组中的字符,即 "hello"。这里的%c用于输出单个字符,所以需要依次列出要输出的字符。较麻烦

方式二:使用for循环来输出字符串。循环条件是str[i]!= '\0',即当遇到字符串结束标志时停止循环。在循环体中,每次使用%c格式符输出str[i],也就是逐个输出字符串中的字符,直到遇到结束标志。更为简便

这是三种不同的字符串初始化方式,

第二种和第三种会自动在末尾添加'\0',字符大小都为6

图中给出了两种不同的字符串输出函数,分别是puts和printf;

puts函数的特点是在输出字符串后会自动添加一个换行符\n,所以即使这里没有显式添加换行符,输出结果也会换行;

printf函数不会像puts函数那样自动换行,除非手动添加换行符。

gets函数的特点是遇到换行符\n才会停止接收输入,在此之前,即使遇到空格也不会停止,会一直接收直到用户按下回车键;

scanf函数在接收字符串时,遇到空格、制表符或换行符就会停止接收,所以它不能接收包含空格的字符串;

由于str数组的类型是char,每个元素占 1 个字节,所以sizeof(str)得到的是整个数组的元素个数(这里是 32)。

使用strlen函数需要包含string.h头文件。对于字符串"hello world",其长度为 11(包含空格)。

  • 第 76 行:使用strcpy函数将字符串"hello world"(包含空格和一个'\0',共 12 个字节)复制到str数组中。strcpy函数会将源字符串(这里是"hello world")完整地复制到目标数组(这里是str)中,包括字符串结束标志'\0'
  • 第 77 行:再次使用strcpy函数,将str数组中的字符串复制到dst数组中。这样,dst数组也将包含与str数组相同的字符串内容。

  • 第 86 行:使用strcat函数将str2连接到str1的末尾。strcat函数会将源字符串(这里是str2)连接到目标字符串(这里是str1)的后面,并且会自动覆盖目标字符串末尾的'\0',然后在新的末尾添加'\0'。连接后str1的内容变为"hello world"
  • 第 87 行:再次使用strcat函数,将字符串"!"连接到str1的末尾。此时str1的内容变为"hello world!"

第 96 行:使用strcmp函数比较str1和字符串"hello"strcmp函数会按字典顺序比较两个字符串,若两个字符串相等,则返回 0;若第一个字符串大于第二个字符串,则返回一个正整数;若第一个字符串小于第二个字符串,则返回一个负整数。这里str1"hello world",与"hello"不相等,且"hello world"大于"hello",所以ret的值为一个正整数。

第 99 行:使用strcmp函数比较str1str2str1"hello world"str2"hel""hello world"大于"hel",所以ret的值为一个正整数。

第 102 - 109 行:使用if - else语句判断strcmp(str1, "hello")的结果是否为 0。如果为 0,说明str1"hello"相同,输出"和hello相同\n";否则,输出"和hello不相同\n"。由于str1"hello world",与"hello"不相同,所以会输出"和hello不相同\n"

第 117 行:使用strcpy函数将字符串"hello world"复制到str数组中。strcpy会将源字符串完整地复制到目标数组中,包括字符串结束标志'\0'

第 118 行:使用strncpy函数将字符串"hello world"复制到str数组中,但只复制sizeof(str) - 1个字符。strncpy用于指定复制的字符数量,这里减去 1 是为了留出一个位置给字符串结束标志'\0',避免数组越界。

第 119 行:使用strncat函数将字符串"hello world"连接到str数组的末尾,但只连接sizeof(str) - strlen(str) - 1个字符。strncat用于指定连接的字符数量,这里先计算出str数组剩余的空间(sizeof(str)减去当前字符串长度strlen(str)再减去 1),然后进行连接操作,同样是为了留出空间给'\0'

第 121 - 128 行:使用strncmp函数比较str数组中的字符串和"hello world",比较的字符数量为strlen(str)strncmp用于比较指定数量的字符,这里根据str数组中实际字符串的长度进行比较。如果比较结果为 0,说明两个字符串相同,输出"相同\n";否则,输出"不相同\n"

第 144 - 148 行:通过一个for循环来实现字符串的倒置。循环条件是i < len / 2,这是因为只需要交换字符串前半部分和后半部分的字符即可实现倒置。例如,对于长度为 11 的字符串"hello world",只需要交换前 5 个字符和后 5 个字符。

在循环体中,首先将str[i]的值存储到tmp中,然后将str[len - i - 1]的值赋给str[i],最后将tmp的值赋给str[len - i - 1],从而实现了两个位置字符的交换。例如,当i = 0时,len - i - 1 = 11 - 0 - 1 = 10,就将str[0](第一个字符h)和str[10](最后一个字符d)进行了交换。

第 159 - 162 行:通过一个while循环来统计字符串的长度。循环条件是str[i]!= '\0',即当遇到字符串结束标志'\0'时停止循环。在循环体中,每次将cnt加 1,并将i加 1,从而遍历整个字符串,统计字符个数(不包括'\0')。

例如,如果用户输入字符串"hello world",那么cnt的值将为 11(因为"hello world"包含 11 个字符,不包括'\0'),输出结果为cnt = 11

这段代码的主要功能是统计用户输入字符串的长度(不包括字符串结束标志'\0')并输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值