C语言 字母大小写转换和数字转换
本帖最后由 独一无② 于 2015-11-6 21:58 编辑题目描述
将一串文本译成密码,密码的规律是:
将原来的小写字母全部翻译成大写字母,大写字母全部翻译成小写字母,数字的翻译规律如下:
0——>9
1——>8
2——>7
3——>6
4——>5
5——>4
6——>3
7——>2
8——>1
9——>0
然后将所有字符的顺序颠倒。
输入
输入一串文本,最大字符个数不超过100。
输出
输出编码后的结果。
样例输入
china
样例输出
ANIHC
@小人
我简化了一下,为什么大写字母 不能输出,小写和数字都行。
#include <stdio.h>
main(){
char str;
int i=0;
scanf("%s",&str);
while(str!='\0')
{
if(str>='A'&&str<='Z'){
str=str+32;
}
if(str>='a'&&str<='z'){
str=str-32;
}
if(str>='0'&&str<='9'){
str=57-(str-48);
}
i++;
}
printf("%s",str);
} 本帖最后由 小人 于 2015-11-7 12:10 编辑
#include <stdio.h>
int main(){
char str = "SAFDSAF";
int i = 0;
//scanf("%s", &str);
while (str != '\0')
{
if ((str >= 'A')&&(str <= 'Z')){
str += 32;
}
else if ((str >= 'a')&&(str <= 'z')){
str = str - 32;
}
else if (str >= '0'&&str <= '9'){
str = 57 - (str - 48);
}
i++;
}
printf("%s", str);
return 0;
}
很简单几行代码就好了{:9_240:} ......... 牡丹花下死做鬼 发表于 2015-11-6 20:42
.........
:cry,没有思路,好难 牡丹花下死做鬼 发表于 2015-11-6 20:42
.........
字母大小写转换 是有专门的函数,但是我不知道怎么用,然后数字怎么转换,就不清楚了 小人 发表于 2015-11-6 21:00
很简单几行代码就好了
int t=0;
int j;
for(j=i-1;j>=0;j--){
Ciphertext=temp;
这里 有点 看不懂,是什么意思 小人 发表于 2015-11-6 21:00
很简单几行代码就好了
#include <stdio.h>
main(){
char str;
int i=0;
scanf("%s",&str);
while(str!='\0')
{
if(str>='A'&&str<='Z'){
str=str+32;
}
if(str>='a'&&str<='z'){
str=str-32;
}
if(str>='0'&&str<='9'){
str=57-(str-48);
}
i++;
}
printf("%s",str);
}
我简化了一下,为什么大写字母不能转换,小写和数字可以
#include <iostream>
using namespace std;
int main()
{
char in={0};//接收用户输入
char out={0};//按密码规则加密
cout<<"请输入要翻译的文本(不要输入空格等不可见字符,回车结束输入)"<<endl;
cin>>in;//输入到in字符数组
int i=0;
while(in)//当没遇到字符串结束符
{
if (in>='a'&& in<='z')//如果是小写字母
{
out=in-('a'-'A');//变大写字符并存放到out
}
if (in>='A'&& in<='Z')//如果是大写字母
{
out=in+('a'-'A');//变小写字符并存放到out
}
if (in>='0'&& in<='9')//如果是数字
{
out='0'+'9'-in;//用9减自己就是规则
}
i++;
}
cout<<"翻译输入如下:"<<endl;
//从0到字符串长度开始循环
for (int j=0;j<strlen(out);j++)
{
//指针从后往前推进, -1是躲开结束符\0
cout<<out;
}
cout<<'\0'<<endl;//补上一个结束符和换行符
system("pause");
return 0;
}
machimilk 发表于 2015-11-6 22:42
:cry,我还没有学指针,后面部分看不懂 独一无② 发表于 2015-11-6 21:31
int t=0;
int j;
for(j=i-1;j>=0;j--){
就是把 字符串 逆序排过来 {:9_240:} 小人 发表于 2015-11-7 08:49
就是把 字符串 逆序排过来
哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和数字都可以,是什么原因呢 独一无② 发表于 2015-11-7 10:06
哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和 ...
可以啊你再试试 #include <stdio.h>
int main(){
char str;
int i=0;
scanf("%s",&str);
while(str!='\0')
{
if(str>='A'&&str<='Z'){
str=str+32;
}
if(str>='a'&&str<='z'){
str=str-32;
}
if(str>='0'&&str<='9'){
str=57-(str-48);
}
i++;
}
printf("%s",str);
return 0;
}
独一无② 发表于 2015-11-7 10:06
哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和 ...
我测试了可以 小人 发表于 2015-11-7 10:11
我测试了可以
为什么我不行,会和编译软件有关吗?我把 大写字母转换 那段代码复制出来重写一个就大写字母转换的程序,可以,但是放到这里面就不行了。 小人 发表于 2015-11-7 10:11
可以啊你再试试
不行啊,用c-free 和c++6.0 都试了,大写字母 不能转换。
#include <stdio.h>
int main(){
char str = "SAFDSAF";
int i = 0;
//scanf("%s", &str);
while (str != '\0')
{
if ((str >= 'A')&&(str <= 'Z')){
str += 32;
}
else if ((str >= 'a')&&(str <= 'z')){
str = str - 32;
}
else if (str >= '0'&&str <= '9'){
str = 57 - (str - 48);
}
i++;
}
printf("%s", str);
return 0;
}
这样就没错了 ,我的错 我太粗心了 居然影藏了一个bug 小人 发表于 2015-11-7 11:43
这样就没错了 ,我的错 我太粗心了 居然影藏了一个bug
为什么 会这样 str += 32;和str = str + 32;表达的意思 不是一样的吗? 粗心大意留下的祸根{:9_240:} 独一无② 发表于 2015-11-7 11:47
为什么 会这样 str += 32;和str = str + 32;表达的意思 不是一样的吗?
一样 的因为我的代码是重新写的所以 {:9_240:} 小人 发表于 2015-11-7 11:49
一样 的因为我的代码是重新写的所以
咦,我怎么看 代码 没有变化,哪里有改动了,:shock:
页:
[1]
2