鱼C论坛

 找回密码
 立即注册
查看: 12064|回复: 25

C语言 字母大小写转换和数字转换

[复制链接]
发表于 2015-11-6 19:57:20 | 显示全部楼层 |阅读模式
15鱼币
本帖最后由 独一无② 于 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[100];
        int i=0;
        scanf("%s",&str);
        while(str[i]!='\0')
        {
                if(str[i]>='A'&&str[i]<='Z'){
                        str[i]=str[i]+32;
                }
                if(str[i]>='a'&&str[i]<='z'){
                        str[i]=str[i]-32;
                }
                if(str[i]>='0'&&str[i]<='9'){
                        str[i]=57-(str[i]-48);
                }
                i++;
        }
        printf("%s",str);
}

最佳答案

查看完整内容

很简单 几行代码就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-6 19:57:21 | 显示全部楼层
本帖最后由 小人 于 2015-11-7 12:10 编辑
#include <stdio.h>
int main(){

        char str[100] = "SAFDSAF";
        int i = 0;
        //scanf("%s", &str);
        while (str[i] != '\0')
        {
                if ((str[i] >= 'A')&&(str[i] <= 'Z')){
                        str[i] += 32;
                }
                else if ((str[i] >= 'a')&&(str[i] <= 'z')){
                        str[i] = str[i] - 32;
                }
                else if (str[i] >= '0'&&str[i] <= '9'){
                        str[i] = 57 - (str[i] - 48);
                }
                i++;
        }
        printf("%s", str);

        return 0;
}
很简单  几行代码就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-6 20:42:12 | 显示全部楼层
.........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 20:56:14 | 显示全部楼层

:cry,没有思路,好难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 20:58:34 | 显示全部楼层

字母大小写转换 是有专门的函数,但是我不知道怎么用,然后数字怎么转换,就不清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 21:31:17 | 显示全部楼层
小人 发表于 2015-11-6 21:00
很简单  几行代码就好了

int t=0;
    int j;
        for(j=i-1;j>=0;j--){
                Ciphertext[t++]=temp[j];


这里 有点 看不懂,是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 21:55:05 | 显示全部楼层
小人 发表于 2015-11-6 21:00
很简单  几行代码就好了
#include <stdio.h>
main(){
        char str[100];
        int i=0;
        scanf("%s",&str);
        while(str[i]!='\0')
        {
                if(str[i]>='A'&&str[i]<='Z'){
                        str[i]=str[i]+32;
                }
                if(str[i]>='a'&&str[i]<='z'){
                        str[i]=str[i]-32;
                }
                if(str[i]>='0'&&str[i]<='9'){
                        str[i]=57-(str[i]-48);
                }
                i++;
        }
        printf("%s",str);
}

我简化了一下,为什么大写字母不能转换,小写和数字可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-6 22:42:59 | 显示全部楼层
QQ截图20151106224133.png
#include <iostream>
using namespace std;
int main()
{
        char in[101]={0};//接收用户输入
        char out[101]={0};//按密码规则加密
        cout<<"请输入要翻译的文本(不要输入空格等不可见字符,回车结束输入)"<<endl;
        cin>>in;//输入到in字符数组
        int i=0;
        while(in[i])//当没遇到字符串结束符
        {
                if (in[i]>='a'&& in[i]<='z')//如果是小写字母
                {
                        out[i]=in[i]-('a'-'A');//变大写字符并存放到out
                }
                if (in[i]>='A'&& in[i]<='Z')//如果是大写字母
                {
                        out[i]=in[i]+('a'-'A');//变小写字符并存放到out
                }
                if (in[i]>='0'&& in[i]<='9')//如果是数字
                {
                        out[i]='0'+'9'-in[i];//用9减自己就是规则
                }
                i++;
        }
        cout<<"翻译输入如下:"<<endl;
        //从0到字符串长度开始循环
        for (int j=0;j<strlen(out);j++)
        {
                //指针从后往前推进, -1是躲开结束符\0
                cout<<out[strlen(out)-j-1];
        }
        cout<<'\0'<<endl;//补上一个结束符和换行符
        system("pause");
        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
拈花小仙 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 22:53:54 | 显示全部楼层

:cry,我还没有学指针,后面部分看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 08:49:04 | 显示全部楼层
独一无② 发表于 2015-11-6 21:31
int t=0;
    int j;
        for(j=i-1;j>=0;j--){

就是把 字符串 逆序排过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-7 10:06:07 | 显示全部楼层
小人 发表于 2015-11-7 08:49
就是把 字符串 逆序排过来

哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和数字都可以,是什么原因呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 10:11:10 | 显示全部楼层
独一无② 发表于 2015-11-7 10:06
哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和 ...

可以啊  你再试试
#include <stdio.h>
int main(){

        char str[100];
        int i=0;
        scanf("%s",&str);
        while(str[i]!='\0')
        {
                if(str[i]>='A'&&str[i]<='Z'){
                        str[i]=str[i]+32;
                }
                if(str[i]>='a'&&str[i]<='z'){
                        str[i]=str[i]-32;
                }
                if(str[i]>='0'&&str[i]<='9'){
                        str[i]=57-(str[i]-48);
                }
                i++;
        }
        printf("%s",str);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 10:11:20 | 显示全部楼层
独一无② 发表于 2015-11-7 10:06
哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和 ...

我测试了可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-7 10:25:11 | 显示全部楼层

为什么我不行,会和编译软件有关吗?我把 大写字母转换 那段代码复制出来重写一个就大写字母转换的程序,可以,但是放到这里面就不行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-7 10:30:47 | 显示全部楼层
小人 发表于 2015-11-7 10:11
可以啊  你再试试

(GKEH6L1NLYJVE~BPH([N_7.jpg
不行啊,用c-free 和c++6.0 都试了,大写字母 不能转换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 11:43:49 | 显示全部楼层
#include <stdio.h>
int main(){

        char str[100] = "SAFDSAF";
        int i = 0;
        //scanf("%s", &str);
        while (str[i] != '\0')
        {
                if ((str[i] >= 'A')&&(str[i] <= 'Z')){
                        str[i] += 32;
                }
                else if ((str[i] >= 'a')&&(str[i] <= 'z')){
                        str[i] = str[i] - 32;
                }
                else if (str[i] >= '0'&&str[i] <= '9'){
                        str[i] = 57 - (str[i] - 48);
                }
                i++;
        }
        printf("%s", str);

        return 0;
}

这样就没错了   ,我的错 我太粗心了   居然影藏了一个bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-7 11:47:26 | 显示全部楼层
小人 发表于 2015-11-7 11:43
这样就没错了   ,我的错 我太粗心了   居然影藏了一个bug

为什么 会这样 str[i] += 32;  和  str[i] = str[i] + 32;  表达的意思 不是一样的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 11:48:13 | 显示全部楼层
粗心大意留下的祸根  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 11:49:00 | 显示全部楼层
独一无② 发表于 2015-11-7 11:47
为什么 会这样 str += 32;  和  str = str + 32;  表达的意思 不是一样的吗?

一样 的  因为我的代码是重新写的  所以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-7 11:50:42 | 显示全部楼层
小人 发表于 2015-11-7 11:49
一样 的  因为我的代码是重新写的  所以

咦,我怎么看 代码 没有变化,哪里有改动了,:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 07:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表