C学习记录4——数组和字符串

11 篇文章 1 订阅

一、数组

1.数组

为方便处理数据把具有相同类型的若干变量按有序形式组织起来。
有序形式:在内存中连续的相同类型的变量空间
形式为:
数据类型 数组名[元素个数]={值1,值2,……}
int arr[10];

2.数组名与下标

数组名[下标]
arr[1]

数组名是一个指向数组首地址的常量,数组元素必须为常量、常量表达式。
数组在内存中占的大小 = 数据类型 * 元素个数

3.数组逆置

int arr[10]={1,2,……,10};  //元素数10可不写
int i = 0;
int j = sizeof(arr)/sizeof(arr[0])-1;
while (i<j)
{
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    i++;
    j--;
}
for (int i=0;i<10;i++)
    printf("%d\n",arr[10])

二、二维数组

1.定义形式

类型说明符 数组名[常量表达式1][常量表达式2]
1:第一维下标长度(行) 2:第二维下标长度(列)

int arr[2][3]=
{
    {1,2,3},
    {4,5,6}
};
或
int arr[2][3]={ {1,2,3},{4,5,6}};

int arr[][3]={ 1,2,3,4,5,6,7};  //只有第一个数可省略
//允许此形式,有列可自动补行数,不足补0。

三、多维数组

如三维数组:
数据类型 数组名[层][行][列]

几维数组输出就需几层循环

for (int i=0;i<2;i++)
{
    for (int j=0;j<2;j++)
    {
        for (int k=0;k<2;k++)
        {
            printf("%d\t",arr[i][j][k];
        }
        printf("\n");
    }
}

四、字符数组和字符串

1.定义字符数组

数组中元素为字符
char arr[5] = {'h','e','l','l','o'};

2.字符串

带\0结尾的字符数组(C语言中无字符串类型)
定义为:char * arr = "hello";
等同于char arr[] = "hello";
等同于char arr[] = {'h','e','l','l','o','\0'};
等同于char arr[6] = {'h','e','l','l','o'};补0,到0即停止

3.定义字符数组储存字符串

char ch=[10];  //只能存入9个字符,结尾有\0.
scanf("%s",ch);  //ch(数组)本身有地址,不用&。 %9s可保留9位
printf("%s",ch);

4.拼接字符串

char ch1[]="hello";
char ch2[]="world";
char ch2[20];
int i=0,j=0; 
while (ch1[i] != '\0')
{
    ch3[i]=ch1[i];
    i++;
}
while (ch2[i]!= 0)  // '\0' = 0
{
    ch3[i+j]=ch2[j];
    j++;
}
ch3[i+j] = 0;

5.字符串数组

char arr[][6]={"hello","world"};{ }可不写

五、字符串的输入输出

在<string.h>头文件中

1.gets()

从标准输入读入字符串,保存到指定内存空间,直到出现换行符或文件结尾,失败返回NULL
gets(str);
gets允许输入字符串有空格,scanf("%s",str)不允许有空格
PS:可通过正则表达式([^\n]接收非\n字符
scanf("%[^\n]",str)可接收空格
gets()与scanf()不知字符串大小,遇换行符、结尾才接收输入,所以易越界,不安全。

2.fgets()

从stream指定的文件内读入字符,保存到指定内存空间,直到出现换行符,文件结尾或已读size-1个字符,最后自动加’\0’结束。
fgets(str,int size,stream);
size:指定最大读取长度size-1
stream:文件指针,如果读键盘输入的字符串,固定写stdin
fgets(str,sizeof(str),stdin);
fgets()读取键盘输入的字符串时,把回车作为字符串的一部分,通过fgets结尾多了"\n",因此安全,不存在缓冲区溢出。
fgets()获取字符串少于元素个数会有\n,大于等于则无。

3.puts()

输出字符串(可空格),输出完成后自动输出一个’\n’,成功返回非负数,错误返回-1.
puts("");换行

4.fputs()

将指定字符串写入stream指定文件中字符串结束符"\0"不写入文件。
字符串输出到屏幕,固定写stdout
fputs(str,stdout);

5.strlen()

计算指定字符串长度,不包含’\0’

五、其他字符串处理函数

1.strcpy()

strcpy(char* dest, str);
把str指向的字符串复制至dest所指的空间中(包括’\0’)
dest:目的字符串首地址
str:源字符串首地址

2.strncpy()

strncpy(dest, stc, n);
把stc指向的前n个字符串复制(不一定包含’\0’)

3.strcat()、strcat()

语法同上
将src字符串连到dest尾部
将src字符串的前n个字符连到dest尾部
会追加’\0’(比strcpy多了找到字符串末尾的0)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值