行亦谦ACM自闭之旅第七周

本文详细介绍了 C++ 中的 String 类型,包括其定义、访问方式、常用操作以及相关函数。通过实例展示了如何计算平均成绩,涉及字符串的插入、删除、查找与比较等操作。适合 C++ 初学者和进阶者阅读。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值