21:单词替换
描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行,
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
main ()
{
string s1, s2, s3;
getline(cin, s1);
s1 = " " + s1 + " ";
int lens1 = s1.size();
getline(cin, s2);
getline(cin, s3);
s2 = " " + s2 + " ";
s3 = " " + s3 + " ";
int lens2 = s2.length();
int lens3 = s3.length();
for(int i = 0; (i = s1.find(s2, i)) >= 0; i += lens3 - 1)
{
s1.replace(i, lens2, s3);
lens1 = s1.size();
}
cout << s1.substr(1, lens1 - 2);
}
22:紧急措施
总时间限制:
1000ms
内存限制:
65536kB
描述
近日,一些热门网站遭受黑客入侵,这些网站的账号、密码及email的数据惨遭泄露。你在这些网站上注册若干账号(使用的用户名不一定相同),但是注册时使用了相同的email。你此时拿到了那份泄露的数据,希望尽快将自己的密码更改。策略如下:根据email找到你的用户名和密码,然后更改密码。更改的规则为:小写和大写交换,非字母字符保持不变。
输入
第一行为你的email地址,长度不超过50个字符且只包含字母、数字和‘@’符号。
第二行为账号数N,N(0 < N < 10000)。
接下来N行,每行表示一个账号,格式为:
用户名 密码 email
它们之间用单个空格分开。用户名、密码、email均不含空格,且长度不超过50个字符。
输出
有若干行,每行为你的一个账号,包括:你的账号,修改后的密码(之间用单个空格分隔)。
如果没有你的账号,则输出empty。
样例输入
样例输入1: abc@pku.edu.cn 5 helloKitty iLoveCats abc@pku.edu.cn 2012 maya2012 cplusplus@exam.com KittyCat 5iKitty abc@pku.edu.cn program password teacher@exam.com whoAmi Feb.29$ abc@pku.edu.cn 样例输入2: abc@pku.edu.cn 1 2012 maya2012 cplusplus@exam.com
样例输出
样例输出1: helloKitty IlOVEcATS KittyCat 5IkITTY whoAmi fEB.29$ 样例输出2: empty
#include<iostream>
#include<cstring>
using namespace std;
int n;
struct Node{
string username;
string password;
string email;
}Node [10005];
void exchange(string cemail){
bool flag = 0;
for(int i = 1; i <= n; i++){
if(cemail == Node[i].email)
{
flag = 1;
for(int j = 0; j < Node[i].password.length(); j++){
if(Node[i].password[j] <= 'Z' && Node[i].password[j] >= 'A')
Node[i].password[j] += 32;
else if(Node[i].password[j] <= 'z' && Node[i].password[j] >= 'a')
Node[i].password[j] -= 32;
else
continue;
}
cout << Node[i].username << " " << Node[i].password << endl;
}
}
if(flag == 0)
cout << "empty" << endl;
}
int main (){
string s;
cin >> s;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> Node[i].username >> Node[i].password >> Node[i].email;
}
exchange(s);
return 0;
}
23:过滤多余的空格
总时间限制:
1000ms
内存限制:
65536kB
描述
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
输入
一行,一个字符串(长度不超过200),句子的头和尾都没有空格。
输出
过滤之后的句子。
样例输入
Hello world.This is c language.
样例输出
Hello world.This is c language.
#include<bits/stdc++.h>
using namespace std;
int main (){
string s1;
while(cin >> s1)
{
cout << s1 << " ";
}
}
24:单词的长度
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。
输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。
输出
依次输出对应单词的长度,之间以逗号间隔。
样例输入
She was born in 1990-01-02 and from Beijing city.
样例输出
3,3,4,2,10,3,4,7,5
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;
int i = 0;
cin >> s;
cout << s.length();
while(cin >> s)
{
cout << "," << s.size();
}
return 0;
}
25:最长最短单词
总时间限制:
1000ms
内存限制:
65536kB
描述
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。
样例输入
I am studying Programming language C in Peking University
样例输出
Programming
I
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s, s1,s2;
int i = 0;
cin >> s;
int len = s.size();
if(s[s.length()-1] == ',')
{
s1 = s;
s1[s.size()-1] = '\n';
s2 = s;
s2[s.size()-1] = '\n';
}
else
{
s1 = s;
s2 = s;
}
while(cin >> s)
{
char c = getchar();
len = s.size();
if(s[s.size()-1] == ',')
{
len = s.size() - 1;
if(s1.size() > len)
{
s1 = s;
s1[s.size()-1] = '\n';
}
if(s2.size() < len)
{
s2 = s;
s2[s.size()-1] = '\n';
}
}
else
{
if(s1.size() > len)
s1 = s;
if(s2.size() < len)
s2 = s;
}
if(c == '\n') break;
}
cout << s2 << endl;
cout << s1 << endl;
return 0;
}