机试——字符串、排序与查找
C++中字符串
string 的基本使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using namespace std;
int main(){
string str,str1 = 'OK'; /*定义string类型变量*/
cin>>str; //输入
str.size() // string类型变量长度
cout<<str<<endl; //输出
for (int i=0; i<str.size(); i++){ //像数组一样访问元素
printf("%c",str[i]);
}
str.insert(str.size(),"..."); //从当前下标开始插入
str.erase(0,5); //删除下标从0~5的元素
str.erase(2);
str.clear(); //str置空
str = str + 'hello'; //字符串连接
str = str + str1;
str.find("ok"); // 在字符串中查找字符串或者字符 如果找不到返回 string::npos
str.sbustr(2,4); //返回str中下标从2开始的四个字符组成的子串
return 0;
}对于需要获取一行的字符串(含空格),需要使用getline
1
2string str;
getline(cin,str);
例子:
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。
输入一行字符串,输出对该字符串加密的结果
1 |
|
排序
- c++内部基于快速排序的函数——sort
1
2
3
4
sort(first,last,comp); // first,last 起始地址、结束地址, 排序方式定义的函数如果sort中的 比较函数comp 返回 true, 则排序时会将比较函数comp的第一个参数置于第二个参数前。
例子: 用一位数组存储学生的学号和成绩,然后按成绩排序输出1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using namespace std;
struct Student{
int number;
int score;
};
const int MAXN = 100;
Student arr[MAXN];
bool Compare(Student a, Student b){
if(a.score == b.score){
return a.number < b.number;
}else{
return a.score < b.score;
}
}
int main(){
int n;
scanf("%d",&n);
for (int i = 0; i < n; ++i) {
scanf("%d%d",&arr[i].number,&arr[i].score);
}
sort(arr,arr+n,Compare);
for (int j = 0; j < n; ++j) {
printf("%d %d\n",arr[j].number,arr[j].score);
}
return 0;
}
查找
机试中最常见的查找是二分查找
二分查找的前提是有序,二分查找的思想是: 对于当前要查找的数,与有序序列中中间位置的数与之做比较:
a. 如果大于要查找的数,则从小于中间位置的序列中再使用该方法查找。
b. 如果小于要查找的数,则从大于中间位置的序列中再使用该方法查找。
1 | //在长度位n的有序数组arr中查找x,返回查找到的下标 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Life Is Binary!