1如果是字母,转换成字母序列的下三个字母,如A译成D、B译成E。
2如果是字母Z,译成C。
3无论是大小写字母,都译成小写字母。
4其他字符一律照原样译出。
5以@表示结束。
void main()
{
char str1[120], str2[120];
int i = 0;
printf("Please input a string:\n");
scanf("%s", str1);
while (str1[i] != '\0')
{
if (str1[i] == 'Z')
str2[i] = 'C';
else if (str1[i]>='A'&&str1[i]<='W')
str2[i] = str1[i] + 35;
else if(str1[i]=='X')
str2[i]=str1[i]+9;
else if(str1[i]=='Y')
str2[i]=str1[i]+9;
else if ( str1[i]>='a'&&str1[i]<='w')
str2[1]=str1[i]+3;
else if (str1[i]>='x'&&str1[i]<='y')
str2[i]=str1[i]-23;
i++;
if (str1[i] == '@') break;
}
printf("\n Source string: %s \n Target string: %s\n", str1, str2);
}
Target string: 蘰烫蘫kllbbCdgjk烫sdasdasiihhzaqkkmHHIIYYZADGH753269552
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str1[120], str2[120];
int i = 0;
printf("Please input a string:\n");
scanf("%s", str1);
while (str1[i] != '\0')
{
if (str1[i] == '@') break;
if (str1[i] == 'Z')
str2[i] = 'C';
else if (str1[i] >= 'A' && str1[i] <= 'W')
str2[i] = str1[i] + 35;
else if (str1[i] == 'X')
str2[i] = str1[i] + 9;
else if (str1[i] == 'Y')
str2[i] = str1[i] + 9;
else if (str1[i] >= 'a' && str1[i] <= 'w')
str2[i] = str1[i] + 3;
else if (str1[i] >= 'x' && str1[i] <= 'y')
str2[i] = str1[i] - 23;
else
str2[i] = str1[i];
i++;
}
str2[i] = '\0';
printf("\n Source string: %s \n Target string: %s\n", str1, str2);
return 0;
}
其他字符原样输出
所以你要么直接在str1里修改数据
要么必须要有个else,把str1里的数据原封不动的赋值给str2
否则有些数据没赋值,是个随机数,不成乱码了吗
使用一个数组内修改
#include <stdio.h>
int main(void)
{
int i=0;
char str[120];
printf("请输入一个字符串:\n");
scanf("%s",str);
while(str[i]!='\0')
{
if(str[i]>='A'&&str[i]<='Z')/*取出A-Z,转换为小写a-z*/
{str[i]=str[i] + 32;
if(str[i]>='a'&&str[i]<='w')/*取出小写a-z,进行+3操作*/
str[i]=str[i]+3;
else if(str[i]>='x'&&str[i]<='z')
str[i]=str[i]-23;}
else if(str[i]=='@')/*判断是否为@,是则退出循环*/
{str[i+1]='\0';
break;}
else if(str[i]>='a'&&str[i]<='w')/*取出小写a-z,进行+3操作*/
str[i]=str[i]+3;
else if(str[i]>='x'&&str[i]<='z')
str[i]=str[i]-23;
i=i+1;
}
printf("%s",str);
return 0;
}