鱼C论坛

 找回密码
 立即注册
查看: 12745|回复: 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

@小人
我简化了一下,为什么大写字母 不能输出,小写和数字都行。
  1. #include <stdio.h>
  2. main(){
  3.         char str[100];
  4.         int i=0;
  5.         scanf("%s",&str);
  6.         while(str[i]!='\0')
  7.         {
  8.                 if(str[i]>='A'&&str[i]<='Z'){
  9.                         str[i]=str[i]+32;
  10.                 }
  11.                 if(str[i]>='a'&&str[i]<='z'){
  12.                         str[i]=str[i]-32;
  13.                 }
  14.                 if(str[i]>='0'&&str[i]<='9'){
  15.                         str[i]=57-(str[i]-48);
  16.                 }
  17.                 i++;
  18.         }
  19.         printf("%s",str);
  20. }
复制代码

最佳答案

查看完整内容

很简单 几行代码就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3.         char str[100] = "SAFDSAF";
  4.         int i = 0;
  5.         //scanf("%s", &str);
  6.         while (str[i] != '\0')
  7.         {
  8.                 if ((str[i] >= 'A')&&(str[i] <= 'Z')){
  9.                         str[i] += 32;
  10.                 }
  11.                 else if ((str[i] >= 'a')&&(str[i] <= 'z')){
  12.                         str[i] = str[i] - 32;
  13.                 }
  14.                 else if (str[i] >= '0'&&str[i] <= '9'){
  15.                         str[i] = 57 - (str[i] - 48);
  16.                 }
  17.                 i++;
  18.         }
  19.         printf("%s", str);

  20.         return 0;
  21. }

复制代码

很简单  几行代码就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-6 20:42:12 | 显示全部楼层
.........
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

:cry,没有思路,好难
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

字母大小写转换 是有专门的函数,但是我不知道怎么用,然后数字怎么转换,就不清楚了
小甲鱼最新课程 -> https://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];


这里 有点 看不懂,是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-6 21:55:05 | 显示全部楼层
小人 发表于 2015-11-6 21:00
很简单  几行代码就好了
  1. #include <stdio.h>
  2. main(){
  3.         char str[100];
  4.         int i=0;
  5.         scanf("%s",&str);
  6.         while(str[i]!='\0')
  7.         {
  8.                 if(str[i]>='A'&&str[i]<='Z'){
  9.                         str[i]=str[i]+32;
  10.                 }
  11.                 if(str[i]>='a'&&str[i]<='z'){
  12.                         str[i]=str[i]-32;
  13.                 }
  14.                 if(str[i]>='0'&&str[i]<='9'){
  15.                         str[i]=57-(str[i]-48);
  16.                 }
  17.                 i++;
  18.         }
  19.         printf("%s",str);
  20. }
复制代码


我简化了一下,为什么大写字母不能转换,小写和数字可以
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

:cry,我还没有学指针,后面部分看不懂
小甲鱼最新课程 -> https://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--){

就是把 字符串 逆序排过来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

哦哦,这题目因为不用逆序,所以我删了,然后又改了一下,改了之后为什么 大写字母不能转换,但是小写和数字都可以,是什么原因呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  3.         char str[100];
  4.         int i=0;
  5.         scanf("%s",&str);
  6.         while(str[i]!='\0')
  7.         {
  8.                 if(str[i]>='A'&&str[i]<='Z'){
  9.                         str[i]=str[i]+32;
  10.                 }
  11.                 if(str[i]>='a'&&str[i]<='z'){
  12.                         str[i]=str[i]-32;
  13.                 }
  14.                 if(str[i]>='0'&&str[i]<='9'){
  15.                         str[i]=57-(str[i]-48);
  16.                 }
  17.                 i++;
  18.         }
  19.         printf("%s",str);

  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我测试了可以
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

(GKEH6L1NLYJVE~BPH([N_7.jpg
不行啊,用c-free 和c++6.0 都试了,大写字母 不能转换。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3.         char str[100] = "SAFDSAF";
  4.         int i = 0;
  5.         //scanf("%s", &str);
  6.         while (str[i] != '\0')
  7.         {
  8.                 if ((str[i] >= 'A')&&(str[i] <= 'Z')){
  9.                         str[i] += 32;
  10.                 }
  11.                 else if ((str[i] >= 'a')&&(str[i] <= 'z')){
  12.                         str[i] = str[i] - 32;
  13.                 }
  14.                 else if (str[i] >= '0'&&str[i] <= '9'){
  15.                         str[i] = 57 - (str[i] - 48);
  16.                 }
  17.                 i++;
  18.         }
  19.         printf("%s", str);

  20.         return 0;
  21. }
复制代码


这样就没错了   ,我的错 我太粗心了   居然影藏了一个bug
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

为什么 会这样 str[i] += 32;  和  str[i] = str[i] + 32;  表达的意思 不是一样的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-7 11:48:13 | 显示全部楼层
粗心大意留下的祸根  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

一样 的  因为我的代码是重新写的  所以
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

咦,我怎么看 代码 没有变化,哪里有改动了,:shock:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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