鱼C论坛

 找回密码
 立即注册
查看: 525|回复: 9

译密码,输入一个字符串(在26个字母内),按每个字母向后变为第4个字母的规律转换

[复制链接]
发表于 2024-3-18 10:26:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
char c;
c=getchar();
while(c!='\n')
{if((c>='A'&&c<='V')||(c>='a'&&c<='v'))
    c=c+4;
if((c>='W'&&c<='Z')||(c>='w'&&c<='z'))
    c=c-22;
}
printf("%c\n",c);
return 0;
}
请哪位大神看一下我的这个逻辑有哪些错误,执行不出正确结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-18 10:26:46 | 显示全部楼层
你的代码存在一些语法错误,有几处赋值操作应该是比较操作。此外,你的逻辑也有误,因为你只判断了大写字母和小写字母的情况,没有考虑其他字符。以下是一个修正后的代码示例:

#include <stdio.h>

int main() {
    char c;
    c = getchar();
    while(c != '\n') {
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
            c += 4;
            if (c > 'Z' && c < 'a') {
                c -= 26;
            }
            else if (c > 'z') {
                c -= 26;
            }
        }
        printf("%c", c);
        c = getchar();
    }
    return 0;
}

这段代码中,我们首先读取用户输入的字符,并将其存储在变量c中。然后,我们通过循环遍历字符串中的每个字符,直到遇到换行符为止。在循环中,我们首先判断字符是否是大写字母或小写字母,如果是,则将其向后移动4个位置。然后,我们检查移动后的字符是否超出了字母范围(即超过了'Z'或'z'),如果是,则将其减去26,使其回到字母开头。最后,我们打印出转换后的结果,并继续读取下一个字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-18 23:25:13 | 显示全部楼层
这个问题只在26个字母中选字符串的,还有为什么要在最后还要读取字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-18 23:25:31 | 显示全部楼层
wsb1991abc 发表于 2024-03-18 23:25
这个问题只在26个字母中选字符串的,还有为什么要在最 ...


非常抱歉,我理解错了你的问题。在这种情况下,我们可以使用取模运算符 `%` 来实现字母的循环转换。以下是一个修正后的代码示例:
#include <stdio.h>

int main() {
    char c;
    c = getchar();
    while(c != '\n') {
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
            c = (c - 'A' + 4) % 26 + 'A';  // 对字母进行循环转换
        }
        printf("%c", c);
        c = getchar();
    }
    return 0;
}

在这段代码中,我们读取用户输入的字符,并将其存储在变量 `c` 中。然后,我们通过循环遍历字符串中的每个字符,直到遇到换行符为止。在循环中,我们首先判断字符是否是大写字母或小写字母,如果是,则将其转换为大写字母并进行循环转换。我们使用 `(c - 'A' + 4) % 26 + 'A'` 的表达式来实现循环转换,其中 `(c - 'A' + 4)` 将字母的 ASCII 值转换为相对于 `'A'` 的偏移量,然后使用取模运算符 `%` 将其限制在 0 到 25 的范围内,最后再加上 `'A'`,将其转换回对应的大写字母。最后,我们打印出转换后的结果,并继续读取下一个字符。

希望这次的解答能满足你的需求!如果有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 10:21:08 | 显示全部楼层
最后一个读取字符的逻辑是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 10:21:19 | 显示全部楼层
wsb1991abc 发表于 2024-03-19 10:21
最后一个读取字符的逻辑是什么


非常抱歉,我之前的回答有误。在这种情况下,我们不需要在最后再次读取字符,因为我们已经在循环中读取了所有的字符。以下是修正后的代码示例:
#include <stdio.h>

int main() {
    char c;
    c = getchar();
    while (c != '\n') {
        if (c >= 'A' && c <= 'Z') {  // 大写字母
            c = (c - 'A' + 4) % 26 + 'A';
        } else if (c >= 'a' && c <= 'z') {  // 小写字母
            c = (c - 'a' + 4) % 26 + 'a';
        }
        putchar(c);
        c = getchar();
    }
    return 0;
}

在这段代码中,我们首先读取用户输入的字符,并将其存储在变量 `c` 中。然后,我们通过循环遍历字符串中的每个字符,直到遇到换行符为止。在循环中,我们首先判断字符是否是大写字母或小写字母,如果是,则将其向后移动4个位置(使用取模运算符 `%` 实现循环转换)。然后,我们打印出转换后的结果,并继续读取下一个字符。

注意:这段代码假设输入的字符串只包含字母,并且不对其他字符进行处理。如果输入包含数字、符号等其他字符,你可以根据需要进行适当的处理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 13:00:52 | 显示全部楼层
第13行不要行不行,为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 13:06:07 | 显示全部楼层
wsb1991abc 发表于 2024-03-19 13:00
第13行不要行不行,为什么


非常抱歉,我之前的回答还是有误。你是正确的,第13行的代码是多余的。由于我们已经在循环中读取了字符并存储在变量c中,所以不需要再次读取字符。以下是修正后的代码示例:#include int main() {    char c;    while ((c = getchar()) != '\n') {        if (c >= 'A' && c = 'a' && c

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 16:31:58 | 显示全部楼层
谢谢你的回答,我把书又看了一遍,看懂了,还是以前的不太熟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 16:32:06 | 显示全部楼层
wsb1991abc 发表于 2024-03-19 16:31
谢谢你的回答,我把书又看了一遍,看懂了,还是以前的不 ...


不客气,很高兴能帮到你!重新回顾和理解编程概念是非常重要的,有时候也需要多次练习才能掌握。如果你还有任何其他问题,都可以随时向我提问。祝你编程学习顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 06:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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