c++学习笔记(4)
1. 一维数组和C字符串:数字是用来存储相同类型变量的数据集合
c++要求在声明数组时,数组的大小是常量:
int size=4;
double numbers[size]; // wrong
const int size=4;
double numbers[size]; // correct
2. 数组初始化语句
double number[] = {1.1, 3, 4, 9.6}
必须在一条语句内完成声明和初始化
注 c++ 中数组复制,需要在两个数组之间逐个元素进行复制:
for(int i=0; i<size; i++)
{
a[i] = b[i];
}
3.实现数组reshuffle
方法:对于数组元素numbers[i], 随机产生一个下标 j (0 <= j <= i ), 交换 numbers[i] 和 numbers[j] 的顺序:
#include <iostream> #include <cstdlib> #include <time.h> using namespace std; const int SIZE=10; int main(int argc, char *argv[]) { srand(time(0)); int numbers[SIZE] = {0,1,2,3,4,5,6,7,8,9}; // 实现数组reshuffle for(int i=SIZE-1; i>0; i--) { int j = rand()%(i+1); // generator a random number between 0~i int tmp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = tmp; } for(int i=0; i<SIZE; i++) { cout << numbers[i] << " "; } cout << endl; return 0; }
string month[ ] = {"January" , " Feburary", ......., "December"}
5. 一副纸牌
思路: 数组实现
int cards[52];
分组: 0-12 , 13-25, 26-38, 39-51 (spade, heart, diamond, club)
使用string suit[ ] ={"spade", ......}
代码:
#include <iostream> #include <ctime> #include <string> using namespace std; const int SIZE = 52; // number of cards; int main(int argc, char *argv[]) { srand(time(0)); int cards[SIZE]; string suits[] = {"spade", "heart", "diamond", "club"}; string ranks[] = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; // 复初值 for(int i=0; i<SIZE; i++) { cards[i] = i; } for(int i=SIZE-1; i>0; i--) // reshuffle { int j= rand() % (i+1); // generate a random index between 0 and i int tmp = cards[i]; cards[i] = cards[j]; cards[j] = tmp; } for(int i=0; i<SIZE; i++) { cout << cards[i] << " "; if(i%10 == 0) cout << endl; } cout << endl; for(int i=0; i<4; i++) { string suit = suits[cards[i]/13]; string rank = ranks[cards[i]%13]; cout << "The selected card is " << suit << " " << rank << endl; } return 0; }
运行结果:
4.数组作为函数参数
当一个数组参数传递给函数,数组的起始地址被传递给了函数中的数组参数。实际参数和形式参数使用的是同一个数组。
5.防止函数修改传递参数的数组:可以将数组参数声明为const类型的数组
6. 数组作为函数的返回值
c++不允许直接返回数组,可以向函数传递两个数组
void reverse(int numbers[ ], int newNumbers[ ] , int SIZE)
{
..............
}
数组逆序实现:
#include <iostream> #include <ctime> #include <string> using namespace std; void printList(int numbers[], int size) { for(int i=0; i<size; i++) { cout << numbers[i] << " "; } cout << endl; } void reverseList(const int numbers[], int newList[], int size) { for(int i=0; i<size; i++) { newList[size-1-i] = numbers[i]; } } int main(int argc, char *argv[]) { int num[5] = {1, 2, 3, 4, 5}; int newlist[5]; reverseList(num, newlist, 5); printList(newlist, 5); return 0; }
另一种实现:
#include <iostream> #include <ctime> #include <string> using namespace std; // 这种方式只用传递一个数组作为参数,但是原数组会被改变 void reverseList(int numbers[], int size) { for(int i=0; i<size/2; i++) { int tmp = numbers[i]; numbers[i] = numbers[size-1-i]; numbers[size-1-i] = tmp; } } void printList(int numbers[], int size) { for(int i=0; i<size; i++) { cout << numbers[i] << " "; } cout << endl; } int main(int argc, char *argv[]) { int num[5] = {1, 2, 3, 4, 5}; reverseList(num, 5); printList(num, 5); return 0; }
搜索数组:顺序搜索和二分搜索
#include <iostream> #include <ctime> #include <string> #include <iomanip> #include <cstdlib> using namespace std; int binarySearch(int [], int, int); int main(int argc, char *argv[]) { int test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int tmp = binarySearch(test, 10, 6); if(tmp==-1) { cout << "Not Found" << endl; } else { cout << "The index is " << tmp << endl; } return 0; } int binarySearch(int list[], int listSize, int key) { int low = 0; int high = listSize - 1; int mid = listSize / 2; while(low <= high) { if(key<list[mid]) high = mid - 1; else if(key>list[mid]) low = mid + 1; else return mid; mid = (low + high) / 2; } return -1; }
数组排序+二分还查找+逆序排列:
#include <iostream> #include <ctime> #include <string> #include <iomanip> #include <cstdlib> using namespace std; int binarySearch(int [], int, int); void select_sorted(int [], int); //选择排序 void printList(int [], int); void reverseList(int [], int); int main(int argc, char *argv[]) { int test[10]; cout << "Enter ten numbers: " << endl; for(int i=0; i<10; i++) { cout << "Enter: "; cin >> test[i]; } cout << "Yuo Enter a list: " << endl; printList(test, 10); select_sorted(test, 10); // 对数组进行排序 cout << "The list after sorted is: " << endl; printList(test, 10); reverseList(test, 10); cout << "The list after reverse: " << endl; printList(test, 10); cout << "Enter the number you want to find: "; int num; cin >> num; int index = binarySearch(test, 10, num); if(index == -1) { cout << "Not found in the list!" << endl; } else { cout << "The index is " << index << endl; } return 0; } int binarySearch(int list[], int listSize, int key) { int low = 0; int high = listSize - 1; int mid = listSize / 2; while(low <= high) { if(key<list[mid]) high = mid - 1; else if(key>list[mid]) low = mid + 1; else return mid; mid = (low + high) / 2; } return -1; } // 函数重载 //double binarySearch(double list[], int listSize, double key) void select_sorted(int list[], int listSize) { /* 选择排序*/ //int min_number = list[0]; 写到这里你是错误的 //int min_number_index = 0; for(int i=0; i<listSize-1; i++) { int min_number = list[i]; int min_number_index = i; for(int j=i; j<listSize; j++) { if(min_number > list[j]) { min_number = list[j]; min_number_index = j; } } int tmp = list[i]; list[i] = list[min_number_index]; list[min_number_index] = tmp; } } void reverseList(int list[], int size) { for(int i=0; i<size/2; i++) { int tmp = list[i]; list[i] = list[size-i-1]; list[size-i-1] = tmp; } } void printList(int list[], int size) { for(int i=0; i<size; i++) { cout << list[i] << " "; } cout << endl; }
C字符串函数s
<cstring> 中的函数
strlen()
strcpy()
strncpy()
strcat()
strncat()
strcmp()
strncmp()
cstdlib()中的函数
int atoi() 返回字符串对应的int值
float atof()
double atol()
itoa()将数子转化为字符串
6. 字符串和数字之间的转化
#include <iostream> #include <ctime> #include <string> #include <iomanip> #include <cstdlib> using namespace std; int main(int argc, char *argv[]) { // 使用atoi将字符串转化为int char s1[] = "250"; char s2[] = "100"; int num = atoi(s1) + atoi(s2); cout << "The number is " << num << endl; char s3[] = "20.78"; char s4[] = "90.33"; double num1 = atof(s3) + atof(s4); cout << "THE number is " << num1 << endl; // 使用itoa()函数将整数转化为字符串: char ss1[15]; char ss2[15]; char ss3[15]; itoa(100, ss1, 16); // 将100按16进制转化为字符串存到ss1中 itoa(100, ss2, 2); itoa(100, ss3, 10); cout << "The hex for 100 is " << ss1 << endl; cout << "The binary for 100 is " << ss2 << endl; cout << "The decimal for 100 is " << ss3 << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)