1035 Password(字符串处理)

这类题目几乎不需要数据结构,算法基础,主要通过简单的逻辑流程和判断实现。

题目描述如下:
在这里插入图片描述
在这里插入图片描述
大致题意:
首先输入一个整数N(<=1000),紧接着输入N行数据,每行数据包括用户名和密码,之间用空格进行分割,如果密码包含”0“,”1“,”l“,”O“,则把零转换成%,把一转换成@,把小写l转换成大写L,把大写O转换成小写o。
输出有多少个用户名的密码进行了转换,并且按顺序输出转换后的用户名和密码。
如果都没进行转换,则输出”There is N account and no account is modified“,N是测试数据的行数。
基本思路:
使用STL的vector<vector<string> >来存储输入的测试数据,每一行测试数据存储到内层的vector中,然后将内层的vector存储到外层的vector。
然后使用for循环对vector进行遍历,在遍历的过程中进行操作,将改变了的字符串存储在另一个双层vector中,最后使用for循环进行输出。
提交结果如下:
有一个测试用例未通过测试,最后得分17分,冥思苦想,未想到遗漏了哪种情况。
在这里插入图片描述
代码如下:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
bool is_contain(string str);   //判断字符串中是否含有以上4种字符
string func(string str);       //将含有以上4种字符串的字符进行转换
int main()
{
    int n;
    cin>>n;
    vector<vector<string> > arr;
    vector<vector<string> > ans;
    for(int i=0;i<n;i++)
    {
        vector<string> temp;
        string name,password;
        cin>>name>>password;
        temp.push_back(name);
        temp.push_back(password);
        arr.push_back(temp);
        temp.clear();
    }
    for(int i=0;i<arr.size();i++)
    {
        if(is_contain(arr[i][1]))
        {
            vector<string> temp;
            temp.push_back(arr[i][0]);
            temp.push_back(func(arr[i][1]));
            ans.push_back(temp);
            temp.clear();
        }
    }
    if(ans.size()==0)
    {
        cout<<"There is "<<n<< " account and no account is modified"<<endl;
        return 0;
    }
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++)
    {
        cout<<ans[i][0]<<" "<<ans[i][1]<<endl;
    }
   
}

bool is_contain(string str)
{
    for(int i=0;i<str.size();i++)
    {
        if(str[i]=='0'||str[i]=='1'||str[i]=='l'||str[i]=='O')
            return true;
    }
    return false;
}

string func(string str)
{
    for(int i=0;i<str.size();i++)
    {
        if(str[i]=='0')
            str[i]='%';
        if(str[i]=='1')
            str[i]='@';
        if(str[i]=='l')
            str[i]='L';
        if(str[i]=='O')
            str[i]='o';
    }
    return str;
}

提交后,排名暂时在30881

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值