C++基础知识代码版本

//
// Created by 15462 on 24-9-21.
//

#include<iostream>
#include<string>
#include<windows.h>
#include<set>
#include<vector>
using namespace std;
#include <cstdlib>
#include <ctime>

bool haveSameLetters(const string &str1, const string &str2) {
    set<char> letters1(str1.begin(), str1.end());
    set<char> letters2(str2.begin(), str2.end());

    // 比较两个字符串是否包含相同的字符
    return letters1 == letters2;
}
/*函数返回类型可以是结构体*/
int getmin (int a,int b)
{
    if(a>b){
        return b;
    }
    return a;
}
int getmax (int a,int b){
    if(a<b){
        return b;
    }
    return a;
}
//首先定义一个结构体类型
struct fun1andfun2{
    int min;
    int max;
};
/*函数返回类型可以是结构体*/
//定义函数:返回值的类型"struct"可以写可以不写
struct fun1andfun2 getfun1andfun2(int a ,int b)//此处的struct fun1andfun2 是返回值类型,也可以写为fun1andfun2
{
    int min =  getmin(a,b);
    int max = getmax(a,b);
    struct fun1andfun2 v = {min , max};
    return  v;
}

void arrsize (int arr[]) {
    cout <<sizeof(arr)<<endl;
}

void sort_arr(int arr[] ,int length) {
    int min;
    int index;
    for (int i = 0; i < length-1; i++) {
        for (int j = i; j < length; j++) {
            if (j==i) {
                min = arr[j];
                index = j;
            }
            if(arr[j]<min) {
                min = arr[j];
                index = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
    }

}
int main(){
    SetConsoleOutputCP(CP_UTF8);
/*
    SetConsoleOutputCP(CP_UTF8);
    int num = rand() % 100;
    cout << num << endl;
    int guess_num;
    do{
        cin >> guess_num;
        if (guess_num > num){
          cout << "大了" << endl;
        }
        else if(guess_num < num){
          cout<<"小了"<<endl;
        }
        else{
          cout<<"yes"<<endl;
        }
    }
    while(guess_num != num);*/
    /*
    九成九while练习
    int i = 1;
    while(i<=9) {
        int num = 1 ;
        while(num<=i) {
            cout<<num << "x" << i << "="<<num* i << "\t";
            num++;
        }
        i++;
        cout<<endl;
    }
    */
    /*
    // 领工资
    SetConsoleOutputCP(CP_UTF8);
    int num = 10000;
    srand(time(0)); // 设置随机种子

    for (int i = 1; i <= 20; i++) {
        int r = rand()%11;
        if(r<5) {
            cout << "员工"<<i <<"绩效分"<<r<<"不发工资,下一位"<< endl;
        }
        else {
            if(num!=0) {
                num-=1000;
                cout << "员工"<<i <<"绩效分"<<r<<"发放1000元"<<"剩余:"<< num << endl;
            }
            else {
                cout<<"工资发完了,下个月领取吧"<<endl;
                break;
            }

        }

    }
    */
    /*
    // for高级写法
    int arr[] = {1,3,45,3,4,2,2};
    for (int i :arr) {
        cout << i << endl;
    }
    */
    /*
    //动态获取数组长度: sizeof(arr) / sizeof(arr[0])
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        cout << arr[i] << endl;
    }
    */
    /*相同字符
    string str1, str2;
    cin >> str1 >> str2;

    string out =  haveSameLetters(str1, str2) ? "true" : "false" ;
    cout << out << endl;
    // if () {
    //     cout << "true" << endl;
    // } else {
    //     cout << "false" << endl;
    // }
    */
    /*读取输入元素入数组
    vector<int> element ;
    int input;
    while(cin>>input) {

        element.push_back(input);
    }
    for (const auto &ele : element) {
        cout<<ele <<",";
    }
    return 0;
    */
    /*数组元素移除
    int * p= new int[10]{1,13,321,3123,3,213,1231,2,32,3};
    int * pnew = new int[8];
    int offest = 0; //设置偏移量
    for (int i = 0; i < 10; i++)
    {
        if (i==0 ||i==5) {
            offest ++;
            continue;
        }
        pnew[i-offest] = p[i];
            }
    delete[] p; //回收老数组
    //可选
    //p = pnew;把老数组的指针指向新数组的内存空间
    for (int i = 0; i < 8; i++) {
        cout << pnew[i] << ",";
    }
    */
    /*冒泡排序
    int  *p  =  new int[10] {1,213,123,312,132,52,5,52,554,3};
    int min;
    int index;
    for (int i = 0; i < 9; i++) { //10个元素,只需要对比9次
        for (int j = i; j < 10; j++) {  //从第i个元素开始找 ,找到最小值放入min
            if(j==i ) {  //在第一个元素的时候先给min赋值
                min = p[j];
                index = j;  //记录下标
            }
            if(p[j] <min) {  //更新min的值
                min = p[j];
                index = j;  //记录此时的下标
            }
        }
        int temp = p[i];
        p[i] = min;
        p[index] = temp;
    }
    for (int i = 0; i < 10; i++) {
        cout << p[i] << ",";
    }
    */
    /*结构体
    struct Student{
        string name ;
        string major_code = "0023231";
        int dormitory = 1 ;
    };
    struct Student s1 = {"维度","3238989323"};
    //后两个参数有默认值可以不提供
    cout<<s1.dormitory<<endl;
    */
    /*结构体数组
    struct Student{
        string name ;
        int age;
        string gender;
    };
    struct Student arr[3];
    arr[0] = {"周杰伦",11,"男"};
    arr[1] = {"林俊杰",12,"男"};
    arr[2]  = {"维度 ",10,"男"};
    for (int i = 0;i<3;i++){
        cout<<arr[i].age<<endl;
        cout<<arr[i].gender<<endl;
        cout<<arr[i].name<<endl;
    }
     */
    /*结构体指针
    //SetConsoleOutputCP(CP_UTF8);
    SetConsoleOutputCP(CP_UTF8);
    struct Student{
        string name;
        int age ;
        string gender;
    };
    //通过指针访问结构体成员需要用->
    //方式一
    struct Student *p = new Student {"维度",14,"女"};
    cout <<p ->name<<endl;
    delete p;
    //方式二:
    struct Student stu = {"参数",15,"男"};
    struct Student *p1 = &stu;
    cout <<p1 ->gender <<endl;
    cout <<stu.name<<endl;//通过结构变量名来访问
    delete p1 ;
     */
    /*结构体指针数组
    SetConsoleOutputCP(CP_UTF8);
    //方式1
    struct Student{
        string name;
        int age ;
        string gender;
    };
    struct Student arr[] ={
            {"周杰伦",13,"女"},
            {"林俊杰",35,"男"},
            {"维度",82,"难"}
    };//创建一个结构体数组
    struct Student *p3 = arr; // 由于数组对象本身所记录的就是首元素的地址,但其不是指针变量,只是记录地址,所以此处也不用取址符&
    cout <<p3[0].name <<endl; //用指针名代替数组名 输出周杰伦
    cout <<p3[1].name <<endl;
    cout<<arr[2].gender <<endl;

    //方式2 (new) 指针直接指向内存
    struct Student *p = new Student[2] {
            {"陈没哦",124,"女"},
            {"奥克",14,"男"}
    };
    cout<<p[0].name<<endl;
    cout<<p[1].gender<<endl;
    cout <<p[1].age<<endl;

    delete[] p;

    //如果是指针那需要使用->去找成员
    //但是此处的p[0]相当于*(p+0),本质是结构体,所以还是使用点.来找
*/
    /*函数返回类型可以是结构体
    struct fun1andfun2 v1 = getfun1andfun2(5,4);
    cout <<v1.max<<endl;
    cout<<v1.min<<endl;
    */

    /*函数传入数组
    //由于数组本身只是第一个元素的地址,所以数组传参不区分值传递和地址传递
    //因为本质都是传递的指针
    //在64位系统中指针的默认内存是8

    int arr [5]  = {1,123,3,123,13};
    cout <<sizeof(arr)<<endl;  //输出20 该arr本质上是数组对象,5个数组每个4字节

    arrsize (arr); // 输出8 ,传入的arr此时是一个指针,不再是数组

    //当传递一个数组作为参数时,本质上传递的是一个指针
    */


    int arr[] = {312,3,21321,312,4,2144,1241,5,1,324};
    sort_arr(arr,10);
    for (int i = 0; i < 10; i++) {
        cout << arr[i] << endl;
    }

return 0;



}

包括:
/ 九九乘法表while练习
/ 领工资
/ for高级写法
/ 动态获取数组长度:sizeof(arr)/sizeof(arr[0])...
/ 相同字符 
 读取输入元素入数组大
 数组元素移除大
/* 冒泡排序
/*结构体
/*结构体数组
/*结构体指针
/*结构体指针数组
/*函数返回类型可以是结构体
/*函数传入数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值