第四节 数组与字符串
1. 数组
数据在计算中的存储位置有许多种方法,变量的存储位置是内存中的随机位置,如果将变量在内存中按顺序排列,形成一块连续的存储空间。这一组变量就是数组。
需要注意的是,这一组数据中变量的数量必须是固定的,并且他们的类型必须相同。
整数的数组只能用来存整数,字符的数组只能用来存字符(字符数组与字符串并不相同)
//声明一个变量 type varName; //为变量赋值 varName = value; //变量的例子 //声明一个整数变量并赋值 int a = 5; //声明一个数组 type arrayName[dimension]; //为数组赋值 //例子 int intList[5]; intList[0] = 2; intList[1] = 5; intList[2] = 33; intList[3] = 3; intList[4] = 5; //注意数组的下标从0开始 //因此数组中的最后一个元素是intList[4]而不是intList[5] //数组也可以在声明时同时被赋值 int intList[5] = {0, 4, 2, 5, 6, 7}; int intList[5] = {4}; int intList[] = {4, 7, 11, 32, 22};
#include <iostream> using namespace std; int main() { int arr[4]; cout << "请输入4个整数:" << endl; for (int i = 0; i < 4; i++) cin >> arr[i]; //为数组中的元素赋值 cout << "Values in array are now:"; for (int i = 0; i < 4; i++) cout << " " << arr[i]; //显示数组中元素的值 cout << endl; return 0; }
#include <iostream> using namespace std; int main() { //声明一个整型数组,里面包含500个元素 int a[500] = { 0 }; int sum = 0; //初始化数组 for (int i = 0; i < 500; i++) { //a[0] = 0 + 1; a[1] = 1 + 1; ... a[i] = i + 1; } //获取数组中的元素值 for (int i = 0; i < 500; i++) { //x = x + y可以简写为x+=; sum += a[i]; } cout << sum; return 0; }
#include <iostream> #include <string> using namespace std; //将数组作为函数的参数使用 string findStudent(string NameList[], int studentID) { NameList[0] = "修改后的姓名"; if (studentID >= 0 && studentID <= 3) return NameList[studentID]; else return "学号输入错误"; } int main() { string studentName[] = { "王大壮", "李二胖", "王小川", "赵成以" }; int ID = 0; cout << "请输入学生学号:" << endl; cin >> ID; cout << "学生姓名为:" << findStudent(studentName, ID) << endl; //特别注意数组的作用域 cout << studentName[0]; return 0; }
//获取数组的长度 int main() { int a[] = { 1,2,3 }; //sizeof函数用来获取变量在内存中的大小 int alength = sizeof(a) / sizeof(a[0]); }
2. 多维数组
type arrayName[dimension1][dimension2]...;
#include <iostream> #include <string> using namespace std; int main() { //声明二维数组,声明二维数组时 //多维数组创建时,注意大括号的数量 string studentName[2][4] = { {"00000001", "00000002", "00000003", "00000004"}, {"张振","李逵","王三雪","付灵惠" } }; //二维数数组的访问 cout << studentName[1][3] << endl; string studentID = ""; cout << "请输入学号:"; cin >> studentID; for (int i = 0; i < 4; i++) { if (studentName[0][i] == studentID) { cout << "学生姓名为:" << studentName[1][i]; break; } } return 0; }
3. 字符串
#include <iostream> //字符串类型所在的库 #include <string> //一些处理字符串的工具函数 //除此以外还有cstring库也可以用来处理字符串,如:拷贝、查找、替换 #include <cctype> using namespace std; int main() { //单个字符 char letter = 'a'; //只含有一个字符的字符数组 char letterList[] = { 'a' }; //当字符数组的最后一个元素是结束符'\0'时,这个字符数组就是字符串 char letterString[] = { 'a', '\0' }; //直接使用字符串时,要使用双引号,双引号会自动在句子的末尾添加结束符 string String = "a"; //以下两种声明的内容相同,但是第一个声明的是字符数组,第二个声明的是字符串 char helloList[] = "Hello, World!"; string helloString = "Hello, World!"; //一些对字符串的操作 is- //来自cctype库 c-char-type cout << "H is captain? : " << isupper(helloString[0]) << " to lower is: " << (char)tolower(helloString[0]) << endl; }
4. 练习
//创建数组,要求用户输入十个数字 //创建成功后,再次要求用户输入数字,并打印这个数字在数组中的索引 #include <iostream> using namespace std; int count(int arr1[10], int numb) { int cont = 0; for (int u = 0; u < 10; u++) { if (arr1[u] == numb) cont = cont + 1; } return cont; } int main() { int arr[10]; int num; cout << "请输入10个数字:"; for (int i = 0; i < 10; i++) cin >> arr[i]; cout << "数组中的数字为:"; for (int i = 0; i < 10; i++) cout << " " << arr[i]; cout << "\n" << "请输入要查找的数字:"; cin >> num; cout << num << " 的索引位:" << count(arr, num); return 0; }
//完成向整型数组中动态增加元素 //数组的长度可以通过 sizeof(array) / sizeof(array[0])进行计算 //sizeof函数用来计算参数在内存中占用的空间大小 #include <iostream> using namespace std; int main() { int insertValue = 5; int insertIndex = 0; //原始数组 int oldArray[8] = { 0 }; //插入后的数组 int newArray[sizeof(oldArray) / sizeof(oldArray[0]) + 1] = { 0 }; int oldArrayLength = sizeof(oldArray) / sizeof(oldArray[0]); //防止越界 if (insertIndex >= oldArrayLength) { for (int i = 0; i < oldArrayLength; i++) { newArray[i] = oldArray[i]; } newArray[oldArrayLength] = insertValue; } //普通插入 else { for (int i = 0; i < insertIndex; i++) { newArray[i] = oldArray[i]; } //插入 newArray[insertIndex] = insertValue; //后移 for (int i = insertIndex + 1; i < (oldArrayLength + 1); i++) { newArray[i] = oldArray[i - 1]; } } return 0; }
//完成将输入中指定位置元素删除的操作 //必须使用continued关键字 #include <iostream> using namespace std; int main() { int deletIndex = 2; //原始数组 int oldArray[4] = { 1, 2, 3, 4 }; //插入后的数组 int newArray[sizeof(oldArray) / sizeof(oldArray[0]) - 1] = { 0 }; int newArrayLength = sizeof(newArray) / sizeof(newArray[0]); for (int oldIndex = 0, newIndex = 0; newIndex < newArrayLength; newIndex++, oldIndex++) { if (oldIndex == deletIndex) { newIndex--; continue; } newArray[newIndex] = oldArray[oldIndex];; } return 0; }
5. 格式化输出
#include <iostream> using namespace std ; int main () { // 使用转义字符进行排版 // /0,结束字符串 // /t,制表符 // /n,回车换行 // //,输出'/' // /",输出'"' cout << "文件地址为:\t\"C:\\C++\\Files\\\"\n"; // 使用 std::cout 进行格式化输出 int a = 17 ; cout <<"oct : " << oct << a <<endl ; // 21 : 8 进制 cout <<"dec : " << dec << a <<endl ; // 17 : 10 进制 cout <<"hex : " << hex << a <<endl ; // 11 : 16 进制 cout <<"hex : " << hex <<17.01 <<endl ; // 17.01 : 不受影响 // 还有其他格式化输出方式,请自行搜索 }
6.作业
制作班级点名册,可以根据输入的学号,修改、输出学生的出勤信息,
并且提供菜单,菜单内容包括:
1. 修改单个学生信息,包括学号、姓名、出勤。
2. 输出单个学生的信息。
3. 输出所有学生的出勤信息统计。
4. 清屏。
5. 退出程序。
使用二维数组完成。
假定学生人数为5人。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析