在一行上输入一个长度为
的字符串
,代表给定的密码。
在一行上输出一个字符串,代表变换后的密码。
NowCoder123
o69d6337123
#include <stdio.h> #include <string.h> int main() { char inp[101]={}; scanf("%s",inp); int length=strlen(inp); for(int i=0;i<length;i++) { if(inp[i]>='0' && inp[i]<='9') { printf("%c",inp[i]); } else if(inp[i]>='A' && inp[i]<='Z') { char temp=inp[i]-'A'+'a'; if((temp+1)>'z') { temp='a'; } else temp=temp+1; printf("%c",temp); } else if(inp[i]>='a' && inp[i]<='z') { int temp=inp[i]-'a'; if(temp<=14) { switch (temp/3) { case 0:printf("2");break; case 1:printf("3");break; case 2:printf("4");break; case 3:printf("5");break; case 4:printf("6");break; } } else { if(temp>=15 && temp<=18) printf("7"); else if(temp>=19 && temp<=21) printf("8"); else printf("9"); } } else printf("%c",inp[i]); } return 0; }
//这道题可以简单理解为 直接替换 详细阅读代码可知 #include <iostream> using namespace std; int main() { string arr,brr; cin >> arr; brr.resize(arr.size());//这里是给brr初始化大小,否则会出现没有输出的情况 for(int i = 0; i < arr.size() ; i++){ if(arr[i] >= 'a' && arr[i] <= 'c'){ brr[i]='2'; } if(arr[i] >= 'd' && arr[i] <= 'f'){ brr[i]='3'; } if(arr[i] >= 'g' && arr[i] <= 'i'){ brr[i]='4'; } if(arr[i] >= 'j' && arr[i] <= 'l'){ brr[i]='5'; } if(arr[i] >= 'm' && arr[i] <= 'o'){ brr[i]='6'; } if(arr[i] >= 'p' && arr[i] <= 's'){ brr[i]='7'; } if(arr[i] >= 't' && arr[i] <= 'v'){ brr[i]='8'; } if(arr[i] >= 'w' && arr[i] <= 'z'){ brr[i]='9'; } if(arr[i] >= 'A' && arr[i] <= 'Y'){ brr[i]=arr[i]+33;//出现大写利用asllc码值进行改变 } if(arr[i] == 'Z'){ brr[i]='a'; } if(arr[i] >= '0' && arr[i] <= '9'){ brr[i]=arr[i]; } } cout<<brr; return 0; }
#include <stdio.h> #include <ctype.h> #include <string.h> /* 小写字母处理 */ char lower_letter_proc(char letter) { if (letter == 'a' || letter == 'b' || letter == 'c') return '2'; else if (letter == 'd' || letter == 'e' || letter == 'f') return '3'; else if (letter == 'g' || letter == 'h' || letter == 'i') return '4'; else if (letter == 'j' || letter == 'k' || letter == 'l') return '5'; else if (letter == 'm' || letter == 'n' || letter == 'o') return '6'; else if (letter == 'p' || letter == 'q' || letter == 'r' || letter == 's') return '7'; else if (letter == 't' || letter == 'u' || letter == 'v') return '8'; else if (letter == 'w' || letter == 'x' || letter == 'y' || letter == 'z') return '9'; else return -1; } /* 大写字母处理,大写变小写且是该字母的后一个字母 */ char upper_letter_proc(char letter) { char ch = tolower(letter); if (ch == 'z') { return 'a'; } else { return ch + 1; } } /* * @brief: 密码加密 * @param: pwd[]——密码数组 * @retval: none */ void proc(char pwd[]) { int len = strlen(pwd); if (len < 1 || len > 100) { perror("pwd length not enough!\n"); return; } for (int i = 0; i < len; i++) { /* 数字和其它的符号都不做变换。 1、是数字,不动。 2、不是字母 “与” 是符号,不动。 */ if ( isdigit(pwd[i]) || (!(isalpha(pwd[i])) && (isgraph(pwd[i]))) ) { //do nothing continue; } if (islower(pwd[i])) { pwd[i] = lower_letter_proc(pwd[i]); } if (isupper(pwd[i])) { pwd[i] = upper_letter_proc(pwd[i]); } } } int main() { char pwd[101] = "\0"; fgets(pwd, sizeof(pwd), stdin); pwd[strcspn(pwd, "\n")] = '\0'; proc(pwd); printf("%s\n", pwd); return 0; }
#include <ctype.h> #include <stdio.h> char low(char a){ int b = a-'a'; if(b<3) return '2'; else if(b<6) return '3'; else if(b<9) return '4'; else if(b<12) return '5'; else if(b<15) return '6'; else if(b<19) return '7'; else if(b<22) return '8'; else if(b<26) return '9'; return 'F'; } int main() { char s[100] = {'\0'}; gets(s); for(int i; s[i] != '\0'; i++){ if(islower(s[i])) s[i] = low(s[i]); if(isupper(s[i])) { if(s[i] == 'Z')s[i] += 7; else s[i] += 33; } } printf("%s",s); return 0; }
#include <stdio.h> #include <string.h> int main() { int i; char a; char *table[8] = {"abc","def", "ghi","jkl","mno","pqrs","tuv","wxyz"}; while(scanf("%c", &a) != EOF) { if (a >= 'a' && a <= 'z') { for(i = 0; i < 8; i++) { if(strchr(table[i], a)) a = '0' + i + 2; } } else if(a >= 'A' && a <= 'Z') { a = a + 32 + 1; } printf("%c",a); } printf("\n"); return 0; }
#include <stdio.h> #include <string.h> int main() { char code[101] = { 0 }; int i, len; scanf("%s",code); len = strlen(code); for(i = 0 ; i <= len - 1 ; i++){ switch (code[i]) { case 'a' : case 'b' : case 'c' : code[i] = '2';break; case 'd' : case 'e' : case 'f' : code[i] = '3';break; case 'g' : case 'h' : case 'i' : code[i] = '4';break; case 'j' : case 'k' : case 'l' : code[i] = '5';break; case 'm' : case 'n' : case 'o' : code[i] = '6';break; case 'p' : case 'q' : case 'r' : case 's' : code[i] = '7';break; case 't' : case 'u' : case 'v' : code[i] = '8';break; case 'w' : case 'x' : case 'y' : case 'z' : code[i] = '9';break; default: break; } if(code[i] >= 65 && code[i] <= 89){ code[i] += 33; } if(code[i] == 'Z'){ code[i] = 'a'; } } printf("%s",code); return 0; }
#include <ctype.h> #include <stdio.h> #include <string.h> int main() { char str[101]; char table[] = "cfilosvz"; scanf("%s", str); for (int i = 0; i < strlen(str); i++) { if (islower(str[i])) { for (int j = 0; j < 8; j++) if (str[i] <= table[j]) { printf("%c", '2' + j); break; } } else if (isupper(str[i])) { str[i] += str[i] == 'Z' ? 'A' - 'Z' : 1; printf("%c", tolower(str[i])); } else printf("%c", str[i]); } }
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char arr[100]={}; gets(arr); int len = strlen(arr); for(int i=0;i<len;i++){ switch(arr[i]){ case 'a': case 'b': case 'c':arr[i]='2';break; case 'd': case 'e': case 'f':arr[i]='3';break; case 'g': case 'h': case 'i':arr[i]='4';break; case 'j': case 'k': case 'l':arr[i]='5';break; case 'm': case 'n': case 'o':arr[i]='6';break; case 'p': case 'q': case 'r': case 's':arr[i]='7';break; case 't': case 'u': case 'v':arr[i]='8';break; case 'w': case 'x': case 'y': case 'z':arr[i]='9';break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y':arr[i]=arr[i]-'A'+'a'+1;break; case 'Z':arr[i]='a';break; } } printf("%s",arr); return 0; }看到很多使用密码表的,代码结构比自己的更加简单,最开始想到的是一连串的if-else判断,后来感觉比较麻烦就使用了switch-case进行处理,但是相对而言还是比直接使用密码表更加方便。
#include <stdio.h> int main() { char buf[96]; int buf_len, i; scanf("%s", buf); buf_len = strlen(buf); for(i = 0; i < buf_len; i++) { if(buf[i] >= 'z') buf[i] = '9'; else if(buf[i] >= 'q') buf[i] = (buf[i] - 'q') / 3 + '7'; else if(buf[i] >= 'a') buf[i] = (buf[i] - 'a') / 3 + '2'; else if(buf[i] >= 'A') buf[i] = (buf[i] - 'A' + 1) % 26 + 'a'; } printf("%s", buf); }
#include<stdio.h> #include<string.h> int zhuanhuan(char p) { int ret; if(p>='a'&&p<='c') { ret=2; }else if(p>='d'&&p<='f') { ret=3; }else if(p>='g'&&p<='i') { ret=4; }else if(p>='j'&&p<='l') { ret=5; }else if(p>='m'&&p<='o') { ret=6; }else if(p>='p'&&p<='s') { ret=7; }else if(p>='t'&&p<='v') { ret=8; }else { ret=9; } return ret; } int main() { char str[101]; int i,j,ret,len; scanf("%s",str); len=strlen(str); for(i=0;i<len;i++) { if(str[i]>='a'&&str[i]<='z') { str[i]=zhuanhuan(str[i])+48; }else if(str[i]>='A'&&str[i]<='Y') { str[i]=str[i]+33; }else if(str[i]=='Z') { str[i]='a'; }else { continue; } } printf("%s",str); return 0; }
#include <stdio.h> #define N 100 int main() { char str[N]; int i=0; scanf("%s",str); while(str[i]!='\0') { if(str[i]>='0'&&str[i]<='9') { i++; continue; } else if(str[i]>='a'&&str[i]<='z') { if(str[i]>='a'&&str[i]<='c') { str[i]='2'; } else if(str[i]>='d'&&str[i]<='f') { str[i]='3'; } else if(str[i]>='g'&&str[i]<='i') { str[i]='4'; } else if(str[i]>='j'&&str[i]<='l') { str[i]='5'; } else if(str[i]>='m'&&str[i]<='o') { str[i]='6'; } else if(str[i]>='p'&&str[i]<='s') { str[i]='7'; } else if(str[i]>='t'&&str[i]<='v') { str[i]='8'; } else if(str[i]>='w'&&str[i]<='z') { str[i]='9'; } i++; } else if(str[i]>='A'&&str[i]<='Y') { str[i]+='a'-'A'+1; i++; } else if(str[i]=='Z') { str[i]='a'; i++; } } printf("%s\n",str); return 0; }//开始一直报错说超时了,我想几条if语句应该不至于,后来发现原来while循环内忘了写i++;