#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;
}
先谢谢各位了。
注释如下,供参考:
#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;
}
for循环那是如果all[i]为空和all[i]!=ch的时候跳出循环