提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
String 字符串类型
头文件
#include <string>
定义String
string str ## 生成空串
string s = "12346789"; ## 直接赋值定义
string s(a) ## 以a定义s
string s(a,strbegin) ## 以a从strbegin到结尾的串定义s,且strbegin只能为下标,不能为地址
string s(a,strbegin,strlen) ## 以a从strbegin开始长度为strlen的串定义s,且strbegin只能为下标,不能为地址
string s(n,c) ## 生成num个c字符的字符串
访问方式
## 下标访问
cout << s[i] << endl;
## 指针访问,用于以下情况
cout << *s.begin() << endl;
cout << *s.end() << endl;
## 迭代器访问
string::iterator it;
for(it = s.begin();it != s.end();it++)
cout << *it << endl;
常规操作(一些自带的函数)
运算符的直接使用
+: 尾部添加(字符字符串皆可)
>: 直接比较大小(按字典循序,只能和字符串做比较)
<: 同上
>=: 同上
<=: 同上
————————————————————————————————————————————————————————————————————————————————————————————————————
基础函数
s.append(a); ## 将a添加到s尾部,a只能为字符串
s.length(); ## 返回s的长度(及大小)
s.size(); ## 返回s的大小(及长度)
s.empty(); ## 返回s是否为空,返回值为bool类型
————————————————————————————————————————————————————————————————————————————————————————————————————
插入、删除、替换
s.insert(s.begin() + i,a); ## 在下标为i的元素前添加a,a只能为字符
s.erase(s.begin() + i); ## 删除下标为i的元素
s.erase(s.begin() + i,s.begin() + j); ## 删除区间[i,j - 1]内的元素
s.replace(strbegin,strlen,a); ## 从下标strbegin开始长度为strlen的字符替换为a,a只能为字符串
————————————————————————————————————————————————————————————————————————————————————————————————————
翻转与排序
reverse(s.begin() + i,s.begin() + j); ## 翻转区间[i,j - 1]内的元素
sort(s.begin() + i,s.begin() + j); ## 对区间[i,j - 1]内的元素排序
可直接用的比较函数
less(降序)
greater(升序)
————————————————————————————————————————————————————————————————————————————————————————————————————
寻找与比较
s.find(a) ## 在s中寻找a(a可以为字符串也可以为字符),如果找到返回找到的第一个下标的值,不能则返回2^32 - 1
s.rfind(a) ## 在s的末尾开始找a,其他同上
s.find(a,strindex) ## 在s下标为strindex的地方开始找a
s.compare(a) ## 将s与a比较(字典循序),a只能为字符串,大于返回1,等于返回0,小于返回-1
提示:string类加[100] 可以近似变成二维字符串数组,s[0]存储了一个字符串
题目
7-6 计算平均成绩
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
输入样例:
5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60
输出样例:
80.00
zhang 00001
chen 21987
AC代码
#include<bits/stdc++.h>
using namespace std;
struct sutdent{
int num;
string name;
int score;
};
int main(){
int n;
cin>>n;
sutdent a[10];
int sum=0;
for(int i=0;i<n;i++){
cin>>a[i].num>>a[i].name>>a[i].score;
sum+=a[i].score;
}
float ave=(float)sum/n;
printf("%.2f\n",ave);
for(int i=0;i<n;i++){
if(a[i].score<ave){
cout<<a[i].name<<' ';
printf("%05d\n",a[i].num);
}
}
return 0;
}