独一无② 发表于 2015-11-6 19:57:20

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-6 19:57:21

本帖最后由 小人 于 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:12

.........

独一无② 发表于 2015-11-6 20:56:14

牡丹花下死做鬼 发表于 2015-11-6 20:42
.........

:cry,没有思路,好难

独一无② 发表于 2015-11-6 20:58:34

牡丹花下死做鬼 发表于 2015-11-6 20:42
.........

字母大小写转换 是有专门的函数,但是我不知道怎么用,然后数字怎么转换,就不清楚了

独一无② 发表于 2015-11-6 21:31:17

小人 发表于 2015-11-6 21:00
很简单几行代码就好了

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


这里 有点 看不懂,是什么意思

独一无② 发表于 2015-11-6 21:55:05

小人 发表于 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);
}

我简化了一下,为什么大写字母不能转换,小写和数字可以

machimilk 发表于 2015-11-6 22:42:59


#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;
}

独一无② 发表于 2015-11-6 22:53:54

machimilk 发表于 2015-11-6 22:42


:cry,我还没有学指针,后面部分看不懂

小人 发表于 2015-11-7 08:49:04

独一无② 发表于 2015-11-6 21:31
int t=0;
    int j;
      for(j=i-1;j>=0;j--){


就是把 字符串 逆序排过来 {:9_240:}

独一无② 发表于 2015-11-7 10:06:07

小人 发表于 2015-11-7 08:49
就是把 字符串 逆序排过来

哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和数字都可以,是什么原因呢

小人 发表于 2015-11-7 10:11:10

独一无② 发表于 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:11:20

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

我测试了可以

独一无② 发表于 2015-11-7 10:25:11

小人 发表于 2015-11-7 10:11
我测试了可以

为什么我不行,会和编译软件有关吗?我把 大写字母转换 那段代码复制出来重写一个就大写字母转换的程序,可以,但是放到这里面就不行了。

独一无② 发表于 2015-11-7 10:30:47

小人 发表于 2015-11-7 10:11
可以啊你再试试


不行啊,用c-free 和c++6.0 都试了,大写字母 不能转换。

小人 发表于 2015-11-7 11:43:49

#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:47:26

小人 发表于 2015-11-7 11:43
这样就没错了   ,我的错 我太粗心了   居然影藏了一个bug

为什么 会这样 str += 32;和str = str + 32;表达的意思 不是一样的吗?

小人 发表于 2015-11-7 11:48:13

粗心大意留下的祸根{:9_240:}

小人 发表于 2015-11-7 11:49:00

独一无② 发表于 2015-11-7 11:47
为什么 会这样 str += 32;和str = str + 32;表达的意思 不是一样的吗?

一样 的因为我的代码是重新写的所以 {:9_240:}

独一无② 发表于 2015-11-7 11:50:42

小人 发表于 2015-11-7 11:49
一样 的因为我的代码是重新写的所以

咦,我怎么看 代码 没有变化,哪里有改动了,:shock:
页: [1] 2
查看完整版本: C语言 字母大小写转换和数字转换