C++day10光速入门指南--指针和数组及选择排序

指针(2)

利用指针求数组最大值和最小值

#include <iostream>
using namespace std;
void max_min_value(int *array, int n, int *maxp, int *minp){
    // maxp指向主函数的max变量, minp指向主函数的min变量
    int *array_end = array + n;
    // 假定第一个元素就是最大值和最小值
    *maxp = *minp = *array;
    for (int *p = array+1; p< array_end ;p++) {
        if (*p > *maxp)
            *maxp = *p;
        else if(*p< *minp)
            *minp = *p;
    }
}

int main() {
    // 指针版本数组最大值和最小值
    int number[10], *p = number, max, min;
    // 23 32 34 43 43 55 67 88 44 1
    for (int i = 0; i < 10; ++i) {
        cin >> *(p + i);
    }
    max_min_value(p, 10, &max, &min);
    for (int i = 0; i < 10; ++i) {
        cout<< *(p + i) << "\t";
    }
    cout<<endl;
    cout<< "max = " <<max << "  min = "<< min <<endl;
}

选择排序


#include <iostream>
using namespace std;
// 我们正常从头到尾扫描最小的数据, 将数据放到第一个位置, 在将剩余的数组中扫到第二小的值,放到第二个位置, 以此类推
void select_sort(int arr[], int len){
    for (int i = 0; i < len -1 ; ++i) {
        int p = i; // 记录最小值的下标, 初始是 i
        for (int j = i + 1; j < len; ++j) {
            if (arr[j] < arr[p])
                p = j;
        }
        // 这里已经产生本轮最小值的下标
        if (p!=i){
            int temp = arr[p];
            arr[p] = arr[i];
            arr[i] = temp;
        }
    }
}

int main() {
    int a[6] = {8, 4, 9, 6, 5, 2};
    select_sort(a, 6);
    for (int i = 0; i < 6; ++i) {
        cout<< a[i] << "\t";
    }
}


指针版本选择排序

#include <iostream>
using namespace std;
// 通过指针访问数组元素, 实现选择排序法
void select_sort(int *a, int len){
    for(int *p = a; p < a+len-1; p++){
        int *minp = p;
        for(int *q = p+1; q < a+len ; q++){
            if (*q < *minp)
                minp = q;
        }
        if (p != minp){
            int temp = *p;
            *p = *minp;
            *minp = temp;
        }
    }
}
int main() {
    int a[6] = {8, 4, 9, 6, 5, 2};
    select_sort(a, 6);
    for (int i = 0; i < 6; ++i) {
        cout<< a[i] << "\t";
    }
}

字符指针

字符数组 在C++中可以最为整型数组处理, 相反也可以
小区别

char c1[10];   int c2[10]

c1分配的空间是10字节 , c2是40字节
c++ 中字符数组用来表示和处理字符串, 规定字符串以 '\0’作为字符串结束标志 '\0的ASCII值为0, 就是空字符;

#include <iostream>
using namespace std;
#include <cstring>

int main() {
    char s1[] = {"Good!"};
    char s2[] = "Good!";
    char s3[] = {'G', 'o', 'o', 'd', '!', '\0'};

    cout<< sizeof(s1)/sizeof(s1[0])<< endl; // 6真实内存的占用长度
    cout<< sizeof(s2)/sizeof(s2[0])<< endl;  // 6
    cout<< sizeof(s3)/sizeof(s3[0])<< endl;  // 6
    cout<< strlen(s1) << endl;  // 5实际字符的个数
    cout<< strlen(s2) << endl;  // 5
    cout<< strlen(s3) << endl;  // 5
}

字符数组追加

#include <iostream>
using namespace std;
#include <cstring>

int main() {
    char a[20] = "ABCD", b[10] = "EFG";
    // 拼接两个字符数组
    int i = strlen(a); // 字符串a的长度
    for (int j = 0; b[j] != '\0' ; ++j, i++)
        a[i] = b[j];
    a[i] = '\0';
    cout<< a << endl;


}

用字符指针访问方式实现

#include <iostream>
using namespace std;
#include <cstring>

int main() {
    char a[20] = "ABCD", b[10] = "EFG";
    char *pa = a,  *pb = b;
    while (*pa != '\0')
        pa++;
    while (*pb != '\0'){
        *pa = *pb;
        pa++;
        pb++;
    }
    *pa = '\0';
    pa = a;
    cout<< pa << endl;
    cout<< a << endl;
}

字符指针作为函数参数, 求字符串的长度

#include <iostream>
using namespace std;
int my_strlen(char *s){
    int count = 0;
    for (; *s !='\0'; s++)
        count++;
    return count;
}
int main() {
    char str[] = "Hello!";
    cout<< *str <<endl; // H
    cout<< str <<endl; // Hello!
    cout<<  my_strlen(str) <<endl; // Hello!
    cout<< *str <<endl; // H
}

在这里插入图片描述

编写 my_strcmp 比较两个字符串的大小
 char s1[ ] = "Hello!";
 char *s2 = "Hello!";
    
 cout<< my_strcmp(s1, s2)<<'\t';  // 0
 cout<< my_strcmp("Hi", s2)<<endl; // 1
  cout<< my_strcmp(s2, "Hi")<<endl; // -1

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值