C语言 简单编码 (如果访问到字符A,W,F就转化成I)
题目是:最近Kingly对编码很感兴趣,于是从网上找了一些编码原则来对字符串做实验。由于Kingly一直很忙,所以希望你这位编程高手来替他解决这个问题。下面是编码原则:(...
题目是:
最近Kingly对编码很感兴趣,于是从网上找了一些编码原则来对字符串做实验。由于Kingly一直很忙,所以希望你这位编程高手来替他解决这个问题。下面是编码原则:(1) 如果访问到字符A,W,F就转化成I;(2) 如果访问到字符C,M,S就分别转化成L,o,v;(3) 如果访问到字符D,P,G,B就转化成e;(4) 如果访问到字符L,X就分别转化成Y,u;(5) 其他字符均保持不变。(6) 遇到END就结束!
Sample Input:
A
CMSD
LMX
END
Sample Output:
I
Love
You
我的程序是:
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while(a[i]=getchar()!='\n')
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
printf("\n");
i=0;
}
else
n=0;
}
return 0;
}
为什么输什么出来的都是笑脸额。。
请看看哪里错了 展开
最近Kingly对编码很感兴趣,于是从网上找了一些编码原则来对字符串做实验。由于Kingly一直很忙,所以希望你这位编程高手来替他解决这个问题。下面是编码原则:(1) 如果访问到字符A,W,F就转化成I;(2) 如果访问到字符C,M,S就分别转化成L,o,v;(3) 如果访问到字符D,P,G,B就转化成e;(4) 如果访问到字符L,X就分别转化成Y,u;(5) 其他字符均保持不变。(6) 遇到END就结束!
Sample Input:
A
CMSD
LMX
END
Sample Output:
I
Love
You
我的程序是:
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while(a[i]=getchar()!='\n')
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
printf("\n");
i=0;
}
else
n=0;
}
return 0;
}
为什么输什么出来的都是笑脸额。。
请看看哪里错了 展开
展开全部
有注释:
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while((a[i]=getchar())!='\n') /* 加上括号 */
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
/*printf("\n");*/
i=0;
}
else
n=0;
}
return 0;
}
如果考虑,ENDXXX 的问题,可以这样
把那个 if() 换成下面的:
if(strlen(a) == 3 && a[0] == 'E' && a[1] == 'N' && a[2] == 'D')
break;
else
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while((a[i]=getchar())!='\n') /* 加上括号 */
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
/*printf("\n");*/
i=0;
}
else
n=0;
}
return 0;
}
如果考虑,ENDXXX 的问题,可以这样
把那个 if() 换成下面的:
if(strlen(a) == 3 && a[0] == 'E' && a[1] == 'N' && a[2] == 'D')
break;
else
更多追问追答
追问
输入END之后没有结束。。为什么
追答
因为 getchar 把 换行 读进来了,
可以在 while 前加上,然后换掉 while
char ch;
while((ch=getchar())!='\n'){
a[i] = ch;
i++;
}
展开全部
我不是很清楚为什么那样该,但是改了之后对了。
把 while(a[i]=getchar()!='\n')
改成:
while( (a[i]=getchar())!= '\n')
而且你的结束输入语句也是错的,假如我输入了 ENDBGDERHJ
该不该结束呢?
建议你使用scanf 或者 gets 输入语句 ,然后使用strlen 计算输入字符串的长度 。而且用这两个输入函数也不会出现 我刚才的疑问了。
把 while(a[i]=getchar()!='\n')
改成:
while( (a[i]=getchar())!= '\n')
而且你的结束输入语句也是错的,假如我输入了 ENDBGDERHJ
该不该结束呢?
建议你使用scanf 或者 gets 输入语句 ,然后使用strlen 计算输入字符串的长度 。而且用这两个输入函数也不会出现 我刚才的疑问了。
追问
输入END之后没有结束。。为什么
追答
你看我的输入,已经结束输入了。
当然了,你可以用这样的判断语句:
if (strcmp(a,"END")==0) break;
就不用那么麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(a[i]=getchar()!='\n')
赋值的顺序从右到左。。如果(a[i]=getchar())不加括号,就是“getchar()不是回车”为真,a[i]=1。ASCII对应soh,所以你看到了笑脸。
如果学过字符串,那就用String,用来判断end比较有效
赋值的顺序从右到左。。如果(a[i]=getchar())不加括号,就是“getchar()不是回车”为真,a[i]=1。ASCII对应soh,所以你看到了笑脸。
如果学过字符串,那就用String,用来判断end比较有效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果用scanf 可以写两遍,,第一个读换行,,第二个读 END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询