Linux C基础(6)

1、冒泡排序

思想:从左向右两两依次比较,如果前一个数比后一个数大的话就交换位置,否则不变

2、字符数组

字符数组的本质:其实就是字符串,以'\0'作为结束符

 存储类型 数据类型 数组名[元素个数];
 char str[6] = {'h','e','1','o','\0'};//最多存储五个元素,必须留一个位置给'\0'
 char str[6] = "hello";
 char str[6] = {"hello"};
 ​
 字符数组清零:char str[6] = {'\0'};

2.1 字符串输出函数

 puts(数组名);
 功能:字符串打印到终端,并自动添加换行;
 注意;遇到'/0'结束

2.2 字符串的输入函数

 gets(数组名);
 功能:将键盘输入的字符串存放到数组中,并在末尾自动添加'\0';
 注意:gets是个危险的函数,不会进行越界检查,所以输入的时候注意不要越界;

gets在scanf后面使用,会直接读取scanf遗留在缓冲区里面的内容

总结

(1)scanf和gets的区别

 scanf是以空格、回车、Tab键作为变量的输入结束;而gets是以回车作为变量的输入结束;
 缓冲区:
 gets:当完成字符串的输入时,会自动清空缓冲区;
 scanf:当完成字符串的输入时,缓冲区会遗留回车、空格、Tab键;
 注意:gets先会查看缓冲区中是否由残留的内容,如果有,直接拿过来使用,否则需要键盘输入;
      scanf是标准输入函数,每一次的输入只能通过键盘输入的方式获取值。

(2)printf和puts有什么区别

 puts会自动添加换行,而pritf不会自动添加换行

3、字符串的处理函数

 strlen,strcpy,strcat,strcmp

都需要头文件:

 #include <string.h>

3.1 strlen

 strlen(数组名/字符串);//传入数组名和字符串都可以
 功能:求字符串的长度
 返回值:字符串的实际长度,不包含'\0'

strlen和sizeof的区别:

1、strlen是函数,sizeof是运算符
2、strlen是函数,只能以char * (字符串)作为参数
   sizeof是运算符,可以使用类型、字符串、变量等等
3、strlen的结果是字符串的实际长度,不包含'\0',而sizeof求得的是整个空间的大小
案例
求字符串的实际长度,不使用库函数

3.2 strcpy

strcpy(数组1,数组2/字符串2);
功能:将数组2或者字符串2的值拷贝到数组1中,包含'\0',相当于完全拷贝
注意:数组1的容量大于数组2

strncpy(数组1,数组2/字符串2,n);
功能:将数组2或者字符串2的前n个字符拷贝到数组1中
注意:拷贝的字符串不包含'\0';

3.3 strcat

strcat(数组1,数组2/字符串2);
功能:将数组2或者字符串2连接到数组1中,数组1中的'\0'会被覆盖
注意:数组1的容量大于数组2的容量

strncat(数组1,数组2/字符串2,n);
功能:将数组2或者字符串2的前n个字符连接到数组1中

连接的是字符‘2’,‘3’,不是数字2,3

3.4 strcmp

strcmp(数组1/字符串1,数组2/字符串2);
功能:比较字符串1和字符串2的大小
返回值:
大于0:字符串1 > 字符串2
等于0:字符串1 == 字符串2
小于0:字符串1 < 字符串2
比较规则:从左至右依次对字符串的ASCII码值进行比较,直到遇到不同的ASCII码或者遇到'\0'结束

大于0:字符串1 > 字符串2

等于0:字符串1 == 字符串2

 

小于0:字符串1 < 字符串2

案例

实现字符串的拷贝,不使用库函数

#include <stdio.h>

int main(void)
{       
        int i = 0;
        char str[30]={"hello"};
        char atr[30]={"yyds"};
        while(atr[i] != '\0')
        {
                str[i]=atr[i];
                i++;
        }
        str[i]='\0';
        puts(str);
        return 0;
}  

作业

1、以下程序的输出结果是 (x=8)

#include <stdio.h>
int main()
{
        int i,j,x=0;
        for(i=0;i<2;i++)
        {
                x++;
                for(j=0;j<3;j++)
                {
                        if(j%2==1)
                                continue;
                                x++;
                }
                x++;
        }
        printf("i=%d\n",i);
        printf("j=%d\n",j);
        printf("x=%d\n",x);
}//x=2,y=3,x=8
i=0,j=0,x=0
i=0,j=0,x=1
i=0,j=0,x=2
i=0,j=1,x=2
i=0,j=2,x=3
i=0,j=3,x=4
i=1,j=0,x=5
i=1,j=0,x=6
i=1,j=2,x=7
i=1,j=3,x=7
i=1,j=3,x=8
i=2,j=3,x=8

2、设x和y均为int型变量,则执行以下的循环后,y值为 (6)

for(y=1,x=1;y<=50;y++)
{
	if(x==10)
		break;
	if (x%2==1)
	{
		x+=5;
		continue;
	}
	x-=3;
}//x=10,y=6
y=1,x=1
y=2,x=6
y=3,x=3
y=4,x=8
y=5,x=5
y=6,x=10

3、实现字符串的连接,不使用库函数

#include <stdio.h>
#include <string.h>

int main(void)
{       
        char str[30]="hello";
        char atr[30]="232cc";
        int i,j=0;
        for(i=strlen(str);i<strlen(str)+strlen(atr);i++)
        {       
                str[i]=atr[j];
                j++;
        }
        printf("str:%s\n",str);
        return 0;
}

4、实现字符串的比较,不使用库函数(选做)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值