王道机试指南4.1~4.2字符串

例题4.1特殊乘法(清华大学上机题)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s1, s2;
    cin >> s1 >> s2;
    int sum = 0;
    for(int i = 0; i < s1.length(); i++){
        for(int j = 0; j < s2.length(); j++){
            int a = s1[i] - '1' + 1;
//            cout << a << endl;
            int b = s2[j] - '1' + 1;
            sum += a * b;
        }
    }
    printf("%d", sum);
    return 0;
}  

例题4.2密码翻译(北京大学上机)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s;
    while(getline(cin ,s)){
        for(int i = 0; i < s.length(); i++){
            if(s[i] == 'z' || s[i] == 'Z'){
                s[i] -= 25;
            }
            else if(isalpha(s[i])){
                s[i]++;
            }
        }
        cout << s << endl;
        return 0;
    }
}  

例题4.3简单密码(北京大学复试上机)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s;
    while(getline(cin, s)){
        if(s == "ENDOFINPUT"){
            break;
        }
        if(s == "START"){
            getline(cin, s);
            for(int i = 0; i < s.length(); i++){
                if(isupper(s[i])){
                    s[i] = (s[i] - 'A' - 5 + 26) % 26 + 'A' ; 
                }
            }
            cout << s << endl;
            getline(cin, s);
        }
        return 0;
    }
}  

例题4.4统计字符(浙江大学上机)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string c, s;
    while(getline(cin, c)){
        if(c == "#")break;
        getline(cin, s);
        for(int i = 0; i < c.length(); i++){
            int sum = 0;
            for(int j = 0; j < s.length(); j++){
                if(c[i] == s[j]) sum++;
            }
            cout << c[i] << " " << sum << endl;
        }
    }
}  

例题4.5字母统计(上海交通大学上机)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s;
    int alpha[26] = {0};
    char c = 'A';
    while(getline(cin, s)){
        for(int i = 0; i < s.length(); i++){
            if(isupper(s[i])){
                alpha[s[i] - 'A']++;
            }
        }
        for(int i = 0; i < 26; i++){
            cout << c++ << ":" << alpha[i] << endl;
        } 
        
        return 0;
    }
}  

习题4.1skew数(北京大学复试上机)

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
int main(){
    string s;
    while(cin >> s){
        int sum = 0;
        for(int i = 0; i < s.length(); i++){
            sum += (s[i] - '0')*(pow(2.0, double(s.length() - i)) - 1);
        }
        cout << sum << endl;
    }
    return 0;
}  

习题4.3首字母大写(北京大学复试上机)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s;
    while(getline(cin, s)){
        if(islower(s[0])) s[0] = s[0] + 'A' - 'a';
        cout << s[0];
        for(int i = 1; i < s.length(); i++){
            if((s[i] == ' ' || s[i] =='\t' ||s[i] == '\r'||s[i] == '\n') && islower(s[i+1])){
                s[i+1] = s[i+1] + 'A' - 'a';
            }
            cout << s[i];
        }
    }
    return 0;
}  

习题4.4后缀子串排序(上海交通大学复试上机)

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    string s;
    cin >> s;
    vector<string> v;
    for(int i = 0; i < s.length(); i++){
        v.push_back(s.substr(i, s.length() - i));
    }
    sort(v.begin(), v.end());
    for(int i = 0; i < v.size(); i++){
        cout << v[i] << endl;
    }
    return 0;
}