Fatsnake2 2022-04-08 10:23 采纳率: 90%
浏览 18
已结题

请问这两个代码是什么原理,也就是他的思路是什么。(标签-ar|关键词-while)

#include<stdio.h>
#include<string.h>
char all[]="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";
int main()
{
int ch;
int i;
while((ch=getchar())!=EOF)
{
for(i=1;all[i]&&all[i]!=ch;i++); //这一句不理解原理

        if(all[i])                                      //还有这一句
        {
            putchar(all[i-1]);
        }
        else
        putchar(ch);
    
}
return 0;

}
先谢谢各位了。

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-04-08 11:31
    关注

    注释如下,供参考:

    #include<stdio.h>
    #include<string.h>
    char all[] = "`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";  // 字符表
    int main()
    {
        int ch;
        int i;
        while ((ch = getchar()) != EOF) //输入一个字符,直到碰到文件结束符退出循环
        {
            for (i = 1; all[i] && all[i] != ch; i++); //这一句不理解原理
                //查表循环,查找输入的字符 ch 在表中的位置 i。 all[i] && all[i] != ch; 等价于: all[i] != '\0' && all[i] != ch;
            
            if (all[i]){ //还有这一句:if (all[i])  等价于:if(all[i] != '\0'), 判断 i 的位置是否是表尾了,也就是输入的字符 ch 在表里是否找到
    
                putchar(all[i - 1]);//输出表里的前一位字符。
            }
            else
               putchar(ch); //输入的字符 ch 不在 all[] 表里面,输出字符 ch 本身。
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟