【2022.12.12每天四个简单题之简单题大智慧系列6】(只出现一次的字符 ,信息加密,输出字符串 , 单词替换 )

只出现一次的字符

给你一个只包含小写字母的字符串。

请你判断是否存在只在字符串中出现过一次的字符。

如果存在,则输出满足条件的字符中位置最靠前的那个。

如果没有,输出 no。

输入格式
共一行,包含一个由小写字母构成的字符串。

数据保证字符串的长度不超过 100000。

输出格式
输出满足条件的第一个字符。

如果没有,则输出 no。

输入样例:
abceabcd
输出样例:
e
我们需要一个数组,通过数组来记录每一个字符出现的次数,其中每个字符对应的数组下标分别是他们对应的ascll码减去a的ascll码
等到遍历一遍后,我们在遍历一遍记录数组,找到其中值为一的那个数组,然后用他的下标加上小a的ascll码即是答案的ascll码,输出即可
代码如下:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[26];
int main()
{
    string s1;
    cin>>s1;
    int len=s1.size();
    for(int i=0;i<len;i++){
        a[s1[i]-'a']++;
    }
    for(int i=0;i<len;i++){
        if(a[s1[i]-'a']==1){
            cout<<s1[i]<<endl;
            return 0;
        }
    }
    puts("no");
    
    return 0;
}

信息加密

在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。

现在给定一个字符串,对其进行加密处理。

加密的规则如下:

字符串中的小写字母,a 加密为 b,b 加密为 c,…,y 加密为 z,z 加密为 a。
字符串中的大写字母,A 加密为 B,B 加密为 C,…,Y 加密为 Z,Z 加密为 A。
字符串中的其他字符,不作处理。
请你输出加密后的字符串。

输入格式
共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式
输出加密后的字符串。

数据范围
输入字符串的长度不超过 100。

输入样例:
Hello! How are you!
输出样例:
Ifmmp! Ipx bsf zpv!
此题的关键是如何让我们的z加上后变回a,当然可以用判断语句来实现,不过我们其实还可以运用取模来运算,即将字符串中的每一个字母通过减去其区间上的第一个数(小a和大A)然后通过题目知我们要给每个字符加一,所以我们加一,然后整体对26取模(因为每个区间不管是adaoz还是A到Z都是二十六个)后再加上起始位置的ascll码(小a和大A)即可
判断代码如下:

if(s1[i]>='a'&&s1[i]<='z'){
            s1[i]='a'+(s1[i]-'a'+1)%26;
        }else if(s1[i]>='A'&&s1[i]<='Z'){
            s1[i]='A'+(s1[i]-'A'+1)%26;
        }

整体代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    string s1;
    getline(cin,s1);
    int len=s1.size();
    for(int i=0;i<len;i++){
        if(s1[i]>='a'&&s1[i]<='z'){
            s1[i]='a'+(s1[i]-'a'+1)%26;
        }else if(s1[i]>='A'&&s1[i]<='Z'){
            s1[i]='A'+(s1[i]-'A'+1)%26;
        }
    }
    cout<<s1<<endl;
    return 0;
}

输出字符串

给定一个字符串 a,请你按照下面的要求输出字符串 b。

给定字符串 a 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 b 的第一个字符;

给定字符串 a 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 b 的第二个字符;

给定字符串 a 的倒数第二个字符的 ASCII 值加最后一个字符的 ASCII 值,得到 b 的倒数第二个字符;

给定字符串 a 的最后一个字符的 ASCII 值加第一个字符的 ASCII 值,得到 b 的最后一个字符。

输入格式
输入共一行,包含字符串 a。注意字符串中可能包含空格。

数据保证字符串内的字符的 ASCII 值均不超过 63。

输出格式
输出共一行,包含字符串 b。

数据范围
2≤a的长度≤100
输入样例:
1 2 3
输出样例:
QRRSd
此题也与上题一样,虽然我们可以通过判断语句判断,但是我们其实也可以像上题一样,通过取模运算来运算,修改判断语句,就像这样:

for(int i = 0; i < a.size(); ++i)
        cout << (char)(a[i] + a[(i + 1) % a.size()]);

这里同样是将数组要加的数组进行了取模运算,这样当他到最后一个的时候就可以加上第一个数,满足了题目要求,简化了代码
代码如下:

#include <iostream>

using namespace std;

int main() {
    string a;
    getline(cin, a);
    for(int i = 0; i < a.size(); ++i)
        cout << (char)(a[i] + a[(i + 1) % a.size()]);
    return 0;
}

单词替换输入一个字符串,以回车结束(字符串长度不超过 100)。

该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。

现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入格式
输入共 3 行。

第 1 行是包含多个单词的字符串 s;

第 2 行是待替换的单词 a(长度不超过 100);

第 3 行是 a 将被替换的单词 b(长度不超过 100)。

输出格式
共一行,输出将 s 中所有单词 a 替换成 b 之后的字符串。

输入样例:
You want someone to help you
You
I
输出样例:
I want someone to help you
首先我们需要读进去三个字符串,因为有空格所以要用到可以读入空格的方式,即getline,而另外的两个字符串只有一个单词故而可以用cin来读入,这时我们还需要用到stringstream,在sstream 的类里面
实现stringstream:stringstream ssin(s1);
定义了一个ssin,初始化成一个字符串流,用法与cin一样,只不过是从字符串中读信息
代码如下:

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
    string s1,a,b;
    getline(cin,s1);
    cin>>a>>b;
    stringstream ssin(s1);
    string str;
    while(ssin>>str){//一直读
        if(str==a){//如果等于a就输出b
            cout<<b<<' ';
        }else{
            cout<<str<<' ';
        }
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想进步的22级本科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值