C++中字符串

  1. 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
    #include<isotream>
    #include<cstdio>

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

  2. 对于需要获取一行的字符串(含空格),需要使用getline

    1
    2
    string str;
    getline(cin,str);

例子:

在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。

输入一行字符串,输出对该字符串加密的结果

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
#include<iostream>
#include<cstdio>

using namespace std;

string incode(string str){
string incodeStr;
for (int i = 0; i < str.size(); ++i) {
if( ('a'<=str[i] && str[i]<='y') || ('A'<=str[i] && str[i]<='Y') ){
incodeStr += str[i]+1;
}else if (str[i] == 'z' || str[i] == 'Z'){
incodeStr += str[i]-25;
}else{
incodeStr += str[i];
}
}
return incodeStr;
}

int main(){
string str;
while (getline(cin,str)){
cout<<incode(str);
}

return 0;
}

排序

  1. c++内部基于快速排序的函数——sort
    1
    2
    3
    4
    #include<algorithm>

    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
    #include<iostream>
    #include<cstdio>

    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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//在长度位n的有序数组arr中查找x,返回查找到的下标
int BinarySearch(int arr,int n,int x){
int low = 0;
int high = n-1;
while(low <= high){
int middle = (low+high)/2;
if(arr[middle] == x){
return middle;
}else if(arr[middle] < x)
low = middle + 1;
}else{
high = middle - 1;
}
}

return -1;
}