在一行上输入一个长度为
的字符串
,代表给定的密码。
在一行上输出一个字符串,代表变换后的密码。
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;
}