30天学会C语言: Day 22-阵列处理

阵列比较

C 语言没办法透过比较运算检查两个阵列(或字串)是否相等,必须要透过阵列对每个圆一个一个做比较
另外宣告一个变数储存目前状态,初始值为1,如果不相等就指派为0,最後在用 if 判断比较的结果

#include<stdio.h>
#include<stdlib.h>

int main(){
	char passWord[10]="abc123", input[10];
    int correct=1;
	scanf("%s", input);
    for(int i=0; passWord[i]!='\0'; i++){
        if(passWord[i] != input[i])
            correct=0;
    }
    if(correct==1)
        puts("Succeed");
    else
        puts("Failed")

	return 0;
}

如果两个元不相等,可以执行 break 中断比较减少执行时间

#include<stdio.h>
#include<stdlib.h>

int main(){
	char passWord[10]="abc123", input[10];
    int correct=1;
	scanf("%s", input);
    for(int i=0; passWord[i]!='\0'; i++){
        if(passWord[i] != input[i]){
            correct=0;
            break;
        }
    }
    if(correct==1)
        puts("Succeed");
    else
        puts("Failed")

	return 0;
}

实际上 true 就是整数1,false 就是整数0,所以最後 if() 的条件可以不用透过比较运算

#include<stdio.h>
#include<stdlib.h>

int main(){
	char passWord[10]="abc123", input[10];
    int correct=1;
	scanf("%s", input);
    for(int i=0; passWord[i]!='\0'; i++){
        if(passWord[i] != input[i]){
            correct=0;
            break;
        }
    }
    if(correct)
        puts("Succeed");
    else
        puts("Failed")

	return 0;
}

阵列反转

反转实际上就是让阵列的第 n 个元和倒数第 n 个元交换,所以先来看怎麽交换两个变数的值

下面例子中:

  1. temp 被设为 a 的值(10),可以想成 a 被复制变成两个,所以现在有 10, 10, 2三个数
  2. a 被设为 b 的值(2),现在 a 的值和 b 一样
  3. 再将 b 设为 temp 的值(10),现在 b 的值和一开始的 a 一样,两变数的数值交换
#include<stdio.h>
#include<stdlib.h>

int main(){
    int a=10, b=2;
    int temp=a;
    a=b;
    b=temp;
    printf("%d %d", a, b);
	return 0;
}

或者可以用数学运算达成,可以省下一个变数

  1. a 加上 b,现在 a 是 12
  2. b 设为 a-b(12-2)是10,b 的值和一开始的 a 相同
  3. a 设为 a-b(12-10)是2,a 的值和一开始的 b 相同,两变数的数值交换
#include<stdio.h>
#include<stdlib.h>

int main(){
    int a=10, b=2;
    a+=b;
    b=a-b;
    a=a-b;
    printf("%d %d", a, b);
	return 0;
}

利用回圈,将阵列的头尾两两交换,达成阵列反转的目的

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[7]={1, 2, 3, 4, 5, 6, 7}, n=7;
    for(int i=0; i!=n/2; i++){
        int t=arr[i];
        arr[i]=arr[n-1-i];
        arr[n-1-i]=t;
    }
    for(int i=0; i!=n; i++)
        printf("%d ", arr[i]);
}

因为元两两交换,所以回圈执行的次数是阵列长度的一半,不管阵列长度是奇数或偶数,都可以用 i!=n/2i!=n/2 作为回圈的条件

  • 假设 n 是4,四个元的索引就是 0, 1, 2, 3,所以回圈需要从 i 等於0执行到 i 等於1,因为 n/2 是2,回圈条件是 i!=n/2i!=n/2 可以满足以上情况
  • 假设 n 是5,五个元的索引就是 0, 1, 2, 3, 4,但奇数个数时正中间的数(这边是第三个,索引是2)不需要交换,所以回圈需要从 i 等於0执行到 i 等於1,因为 n/2 是2,回圈条件是 i!=n/2i!=n/2 可以满足以上情况

因为索引从0开始,所以最後一个元的索引是 n-1,和 arr[i](第 i+1 个)交换的就是 arr[n-1-i](倒数第 i+1 个)


<<:  初探网路安全(四):加密演算法,何谓对称及非对称式加密?

>>:  JavaScript Day23 - 条件(三元)运算子

[Day7] Android - Kotlin笔记:JetPack - KTX简介

KTX是Jetpack中的一套extension, 提供了许多简洁、惯用的 Kotlin用法。 写法...

从 JavaScript 角度学 Python(8) - BMI 计算(1)

前言 接下来这一篇算是收割前面几个章节的章节小练习,基本上我是尽量规划每过几个章节就有一些小作业、小...

Day 22 Todo list

今天将会介绍简易的todo list 功能 新增事项(push将输入值放入阵列) Enter加入资料...

GCP Cloud SQL

Cloud SQL 今天主题Mysql,所有的开发我想一定无法脱离资料库的使用,这点Google也帮...

DAY25 - 网站分析工具介绍 - 质化分析工具Hotjar

今天先来介绍一个,我第一次看到之後有点被吓到的工具 Hotjar Hotjar是一个质化的网站分析工...