//
// 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])...
/ 相同字符
读取输入元素入数组大
数组元素移除大
/* 冒泡排序
/*结构体
/*结构体数组
/*结构体指针
/*结构体指针数组
/*函数返回类型可以是结构体
/*函数传入数组