C++实验(6) string类与STL
1 StringSort
描述
编写程序,利用std::sort完成一个字符串(std::string类型)的排序(降序)并输出。
输入
输入一行:由大小写字母和数字组成的字符串。
输出
输出排序后的字符串。
输入样例 1 输出样例 1 abcde edcba
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;int main()
{string s;cin>>s;sort(s.begin(),s.end(),greater<char>());cout<<s<<endl;return 0;
}方法二
bool compare(char a, char b)
{return a > b;
}int main()
{string s;cin>>s;sort(s.begin(),s.end(),compare);cout<<s<<endl;return 0;
}
sort的用法
1 将数组下标从n1到n2的元素从小到大排序
sort( 数组名+n1,数组名+n2);
2 从大到小进行排序,T对应元素类型
sort( 数组名+n1,数组名+n2,greater<T>());
3 自定义排序规则
sort(数组名+n1,数组名+n2,排序规则结构名);
struct 结构名{bool operator()(const T &a1, const T &a2){return ;} };
2 StringsSort
描述
编写程序,利用std::sort进行排序。
使用vector容器输入若干个string类型字符串。
对每个字符串中的字符,根据字典序排序(A到Z, a到z)。
对处理之后的字符串,根据字符的逆字典序(z到a,Z到A)排序。
输入
输入第一行为一个正整数N,然后依次输入N个不带空格的字符串。
输出
参考输出样例
输入样例 1 输出样例 1 4
C++
ACM
AHa
MomoDaDMamoo
AHa
ACM
++C
#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{int n;cin >> n;std::vector<string> s;for (int i = 1; i <= n; i++){string str;cin >> str;//输入字符串sort(str.begin(), str.end());//对字符串中的字符进行排序s.push_back(str);}//方法一std::sort(s.begin(),s.end());//对字符串进行正序排序vector<string>::reverse_iterator it;//定义迭代器for (it = s.rbegin(); it !=s. rend(); it++)//逆序输出字符串cout << *it << endl;return 0;
}
//方法二
sort(s.begin(),s.end(),greater<string>());
for(int i=0;i<n;i++){cout<<s[i]<<endl;
}
vec.push_back(); 将一个新的元素插到vector的最后面
- vector迭代器定义时,前面必须使用命名空间std,否则会报错。而其他的容器(map、list)有没有命名空间std都不会报错。
- begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。
- c.begin() 返回一个迭代器,它指向容器c的第一个元素
- c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置
- c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素
- c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置
3 SimpleList
描述
编写程序,定义一个结构体struct Student{ int no; string name;};并用这个结构体练习使用list。包含往list里添加元素以及输出list的所有元素。
struct Student {int no;string name;};
并使用以下main函数测试
int main(){std::list<Student> li;Input(li); //输入Show(li); //输出return 0;}
输入
第一行一个整数n,表示共有n个学生信息。
接下来n行,每行是一个整数和一个字符串,分别表示学生的学号和姓名。
输出
按顺序输出list中的所有元素,每个结构体元素占一行。结构体成员之间以逗号空格隔开。
输入样例 1 输出样例 1 3
1010101 zhangsan
1010102 lisi
1010103 wangwu1010101, zhangsan
1010102, lisi
1010103, wangwu
#include <bits/stdc++.h>//包含了所有头文件
using namespace std;void Input(std::list<Student>& li)
{int n;cin >> n;while (n--){Student st;cin >> st.no >> st.name;li.push_back(st);}
}void Show(const std::list<Student>& li)//const
{std::list<Student>::const_iterator it;//不加std::也可for (it = li.begin(); it != li.end(); it++)//正序输出{cout << (*it).no << ", " << (*it).name << endl;}
}
4 CardGame
描述
桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。
当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。
请用std::queue模拟这个过程,依次输出每次扔掉的牌以及最后剩下的牌的编号。
输入
输入正整数n(n<1000000)。
输出
在一行内依次输出每次扔掉的牌以及最后剩下的牌的编号,编号之间用一个空格隔开。所有输出最后加一个换行符。
输入样例 1 输出样例 1 7 1 3 5 7 4 2 6 提示
可以用std::queue实现
#include<iostream>
#include<queue>
using namespace std;
int main()
{queue<int> q; //创建queueint n; cin >> n;for (int i = 0; i < n; i++){q.push(i + 1);//将每张牌的编号加入q}while (q.size() >= 2){cout << q.front() << " ";//输出第一张牌的编号q.pop(); //删除第一张牌q.push(q.front()); //将新的第一张牌复制一张至最后 q.pop(); //删除第一张牌}while (q.size() == 1){cout << q.front() << " "; q.pop();}return 0;
}
queue基本用法
只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。
queue<类型> 名称;
- front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
- push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
- pop():删除 queue 中的第一个元素。
- size():返回 queue 中元素的个数。
- empty():如果 queue 中没有元素的话,返回 true。
5 Marble
描述
现有N个大理石,每个大理石上写了一个非负整数。首先对这些整数从小到大排序,然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,就回答哪个大理石上写着x(如果有多个大理石上出现x,那么回答第一次出现的大理石编号)。排序后的大理石从左到右编号为1~N。
输入
输入包含多组测试数据,每组数据分三行第一行是两个正整数N(N<1000)和Q(Q<1000)第二行是N个非负整数第三行是Q个非负整数。
输出
对于每一个询问(x),如果有第i个大理石上写着x,则输出x found at i,否则输出x not found。格式详见样例。
输入样例 1 输出样例 1 4 1
2 3 5 1
5
5 2
1 3 3 3 1
2 35 found at 4
2 not found
3 found at 3提示
可以直接使用algorithm头文件中的std::sort和std::lower_bound函数,后者的功能是查找大于等于x的第一个位置。
#include <iostream>
#include<algorithm>
using namespace std;int main() {int a[1003];int n,q;while(cin>>n>>q){for(int i=1;i<=n;i++)//注意此处不令i=0,让下标与所在位置一致cin>>a[i];sort(a+1,a+1+n);//将大理石数从小到大排序for(int j=0;j<q;j++){int key;//目标数cin>>key;int aim = lower_bound(a, a+n, key) - a;//目标数出现的第一个位置if (key != a[aim]){cout <<key<<" not found "<<endl;}else{cout <<key<<" found at "<<aim<< endl;}}}return 0;
}
lower_bound
返回值是一个迭代器,返回指向大于等于key的第一个值的位置。
lower_bound(数组名+起始位置,数组名+终止位置,key)
C++实验(6) string类与STL相关推荐
- C 风格字符串与C++中string类区别
1. 概述 字符串是若干个有效字符(字母.数字.专用字符.转义字符等)的序列.C语言中没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符型数组中.因此,为了存放字符串,常常在程序中定义字符 ...
- c++ string类 知识点整理
string 类是 STL 中 basic_string 模板实例化得到的模板类.其定义如下: typedef basic_string string; basic_string 此处可以不必深究. ...
- C++ 笔记(22)— STL string 类(字符串赋值、访问、拼接、查找、翻转、大小写转换)
1. 实例化和赋值 STL string #include <string> #include <iostream>int main () {using namespace s ...
- STL 的string类怎么啦?
STL 的string类怎么啦? 陈皓 前言 上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度 ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- c++ string类_C++|细说STL string类概貌及底层细节
C语言中的字符串称为C风格字符串,是一个以'0'结尾的字符数组,string.h库只提供了有限.不甚安全的字符串操作函数.char str[]只能定义编译期确定大小的字符串,而保存在堆内存的动态字符数 ...
- Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...
Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...
- stl之string类用法详细总结
标准c++中String类非常强大,合理使用,能极大提高编程效率,下面就对string类的用法进行总结. 头文件 #include<string> String类的构造函数如下: 1) ...
- C++【STL】【string类的使用】
目录 string类的常用接口说明 1. string类对象的常见构造 2. string类对象的容量操作 3. string类对象的访问及遍历操作 [LeetCode]反转字符串 string的迭代 ...
最新文章
- Udacity机器人软件工程师课程笔记(二十一) - 对点云进行集群可视化 - 聚类的分割 - K-means|K均值聚类, DBSCAN算法
- 【移动开发】Android应用开发者应该知道的东西
- 浅谈贷后管理之贷后跟踪——微金时代解决方案
- NYOJ 305 表达式求值
- git新建项目并push进去
- document.addeventlistener方法不执行_JUnit 5 测试方法的执行优先级
- sequelize 增加数据库字段_Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)...
- java压缩图片等比缩放_java对图片进行压缩和resize缩放的方法
- 【mac】mac 安装nginx
- oracle批量update 转
- linux zookeeper 端口号,linux下zookeeper安装
- C# Redis的操作
- RTI_DDS自定义插件开发 4 接收方
- Silverlight 离线安装包
- Kali-Linux windows 双系统的安装
- cmd下载的python包,pycharm中却无法使用(由于虚拟环境)
- vue静态资源打包中的坑与解决方案
- python语句中生成小数的语句_下列 Python 语句的输出结果是 。 print( 数量 {0}, 单价 {1} .format(100,285.6)) print(str.format(...
- 双系统重装Ubuntu 16.04
- winUSB设备的开发方法