1035 Password(字符串处理)

    科技2022-09-02  129

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

    题目描述如下: 大致题意: 首先输入一个整数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

    Processed: 0.008, SQL: 9