华清远见25072班C语言学习day6
重点内容:
一维字符数组:
定义:
C中的字符数组通常用于存储字符串;char 数组名[长度];
初始化和赋值:
方法一:使用字符初始化
完全初始化 char arr[3]={'a','b','c'};
不完全初始化 char arr1[5]={'a','b','c'};-->不完全初始化,未初始化的部分默认为0
方法二:使用字符串给字符数组初始化
不完全初始化 char arr[]="hello";-->不给长度的初始化,需要给'\0'预留出空间
数组名的含义:
数组名表示数组中首元素的地址,不能更改
C中字符串的处理逻辑:
C语言中没有字符串类型,所以字符串用字符数组存储,为了和普通的字符数组区分,字符串后面有看不见的'\0'作为结束的标志
所以C中所有对字符串处理的函数和格式符,都是要数组(字符串)的首地址,从首地址开始处理字符串遇到'\0'结束对字符串的操作
字符串的输入输出函数:
gets函数:
gets(字符串的首地址); //从终端获取字符串
使用gets函数获取会报警告,因为gets不会做合理性检查(可能数组不能容纳下字符串也会写入)
puts函数:
puts(字符串的首地址);-->从字符串的首地址开始,一直向后输出,直到遇到'\0'结束
字符串函数族的函数:
如果要使用字符串函数族的函数需要导头文件#include
strlen:求字符串的真实长度(不包括'\0')
strlen(字符串首地址);
strcpy:字符串拷贝
strcpy(目标字符串的首地址,源字符串的首地址);-->将源字符串中的内容,拷贝给目标字符串中,需要保证目标字符串的空间足够大,来接受拷贝的结果
strcat:将一个字符串拼接到另一个字符串后面
strcat(目标字符串的首地址,源字符串的首地址);-->目标字符串必须足够长,接收拼接后的结果
strcmp:字符串比较函数,C中不支持字符串的比较,用strcmp来比较字符串大小
strcmp(字符串s1的首地址,字符串s2的首地址)-->比较字符串s1和s2中相同位置的每一个字符,如果字符相同继续向下一个位置比较,如果不同直接返回s1中字符-s2中字符的差值,结束函数(遇到不同字符就结束)
bzero:内存置0,从首地址开始置n个字节的0
bzero(要置0的空间的首地址,从首地址开始置0多大空间)
memset:把从s地址开始的n个Byte的空间置为c
memset(要置位的内存的首地址,要置为什么内容,置多少个字节)
作业:
1.把strlen、strcpy、strcat自己实现(不可以使用库函数)
strlen:
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr[100]="";
gets(arr);
int i=0;
while(arr[i])
{
i++;
}
printf("len=%d",i);
putchar(10);
return 0;
}
strcpy:
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[]="hello world";
char arr2[]="hqyj25072";
puts(arr1);
puts(arr2);
int i=0;
while(arr2[i])
{
arr1[i]=arr2[i];
i++;
}
arr1[i]=arr2[i];
printf("after strcpy:");
puts(arr1);
return 0;
}
strcat:
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[100]="hello world";
char arr2[]="hqyj25072";
puts(arr1);
puts(arr2);
int i=0;
while(arr1[i])
{
i++;
}
int j=0;
while(arr2[j])
{
arr1[i]=arr2[j];
j++;
i++;
}
arr1[i]=arr2[j];
printf("after strcat:");
puts(arr1);
return 0;
}
2.终端输入10个学生成绩,根据用户选择1表示升序,0表示降序,完成对成绩的排序。
程序源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int arr[10];
printf("please enter arr:");
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len;i++)
{
scanf("%d",&arr[i]);
}
int choose;
printf("please choose 1 or 0(1升序、0降序):");
scanf("%d",&choose);
if(choose==1)
{
for(int i=1;i<len;i++)
{
for(int j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
else
{
for(int i=1;i<len;i++)
{
int max_index=i-1;
for(int j=i;j<len;j++)
{
if(arr[max_index]<arr[j])
{
max_index=j;
}
}
if(max_index!=i-1)
{
int temp=arr[max_index];
arr[max_index]=arr[i-1];
arr[i-1]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%d\t",arr[i]);
}
putchar(10);
return 0;
}
3.思维导图