王道机试指南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;
}