1.字符串(添加头文件string)
是由数字,字母,下划线组成的一串字符.
1.1 定义字符串
string s;//表示定义了一个字符串s
1.2 读入字符串
方法一:cin语句
如:cin>>s;//cin不能读入空格
方法二:getline()函数
如:getline(cin,s);//getline()可以读入空格
1.3 计算字符串长度
方法一:size()函数
使用方法:int len=字符串名.size();//len表示字符串长度
方法二:length()函数
使用方法:int len=字符串名.length();//len表示字符串长度
1.4 遍历字符串各个字符
利用字符串名加元素对应下标(下标默认从0开始)进行访问(字符串名[下标]),代码如下:
string s;
getline(cin,s);
int len=s.size();
for (int i=0;i<len;i++){
cout<<s[i];
}
1.5 字符串结束标志
字符串默认以空字符'\0'结束.
2.结构体(struct)
结构体是由一系列具有相同或不相同类型的数据构成的数据集合.
2.1 声明结构体
在主函数之前进行声明.
一般形式如下:
struct 结构体名称{
成员列表;
};
如:声明一个包含学生姓名,年龄和成绩的结构体.
struct student{
string name;//学生姓名
int age;//学生年龄
double score;//学生成绩
};
2.2 定义结构体变量
利用结构体名称进行定义,如:student a;或student a[105];
2.3 数据访问
利用结构体变量名,各成员名和成员访问运算符(.)进行访问,一般形式如下:
结构体变量名.成员名;
如:a.name;表示访问该学生的姓名.
2.4 for循环输入输出
student a[105];//定义可存储105人信息的结构体数组
int n;
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i].name>>a[i].age>>a[i].score;
}
for (int i=1;i<=n;i++){
cout<<a[i].name<<' '<<a[i].age<<' '<<a[i].score<<endl;
}
3.单,多关键字排序
3.1 单关键字排序
针对数据的某一特性进行排序.
cmp()比较函数:作为sort排序函数第三个参数,用于确定排序方式.
如:
bool cmp(student a,student b){//按学生成绩进行排序
return a.score>b.score;//大于表示从大到小排
//小于表示从小到大排
}
3.2 多关键字排序
针对数据的某几种特性进行排序,先以主关键字排序,如果主关键字相同则根据次关键字排序...
如:
bool cmp(student a,student b){//将学生成绩按总分高低进行排序,若总分相同则按数学成绩高低排
if (a.score==b.score){
return a.math>b.math;
}
return a.score>b.score;
}
4.文件操作(添加头文件cstdio)
写在程序输入输出语句之前.
重定向文件输入:freopen("文件名","r",stdin);
重定向文件输出:freopen("文件名","w",stdout);
关闭输入输出文件:fclose(stdin);fclose(stdout);
5.自定义函数
5.1 定义函数
定义形式如下:
返回值类型 函数名(形参列表){
函数体;
}
说明:1)返回值类型:即为函数返回值的数据类型,若该函数无返回值,则数据类型为void;
2)函数名:即该函数的名称,一般根据该函数作用取容易记忆的名称;
3)形参列表:形参列表可以为空,即无参函数,也可以有多个形参,形参间用逗号隔开,且必须有相应的数据类型.不管有无形参,圆括号均不能省略.
4)函数允许嵌套使用,但不允许嵌套定义.
5.2 调用函数
调用形式如下:
函数名(实参列表);
调用时实参列表中应给出与定义时形参列表个数相同且数据类型相符的实参.
例:自定义函数prime,判断整数n是否是素数.
bool prime(int n){
if (n<2) return false;//返回假 说明不是素数
for (int i=2;i*i<=n;i++){
if (n%i==0){
return false;//若有除了1和n以外的因数 返回假 说明不是素数
}
}
return true;//若无除了1和n以外的因数 返回真 说明是素数
}
6.递归算法
6.1 基本思想
函数直接或间接调用它自己解决问题的方法.
6.2 递归两要素
1)递归边界
2)递归表达式
6.3 一般程序框架
返回值类型 函数名(形参列表){
if (边界条件){
//判断是否到达递归边界 若到达则返回相应的值
}
else{
//没到达递归边界则根据递归表达式继续递归
}
}
典型例题: 斐波拉契数列,最大公约数等.
7.回溯算法
7.1 基本思想
从一条路往前走,能进则进,不能进则退回来,换一条路再试.
7.2 一般程序框架
void search(int step){//step表示搜索进行到第几步
if (条件表达式){//判断是否达到搜索目的
//输出结果;
return ;
}
else{
for (int i=1;i<=情况种数;i++){//枚举当前这一步搜索可选情况
if (条件表达式){//判断当前情况是否满足题目要求 若满足则说明可选
//保存结果;
search(step+1);//进行下一步搜索
//回溯;返回上一步状态
}
}
}
}
共 5 条回复
You did good job!
佩服佩服
非常nice!!!
字符串还有sscanf之类的神操作呢