| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:if 和 else if 的执行结果不同求教
只看楼主 加入收藏
库特莉亚芙卡
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-10-22
收藏
 问题点数:0 回复次数:4 
if 和 else if 的执行结果不同求教
在校OJ上做一道密信的题,题目见下
Description

这里有一封加密过的信,需要你翻译。
信的内容为一行无空格的小写字符串。
翻译规则如下:
b 代表 ' '
q 代表 ','
t 代表 '!'
m 代表 l
i 代表 e
c 代表 a
a 代表 c
e 代表 i
l 代表 m

Input
输入包含多组测试用例。
每组测试用包含一个长度不超过10000的字符串。
Output
对于每组测试用例,输出翻译后的结果。
Sample Input
pmicsibforgevibliqbscrct
ebmovibyout
Sample Output
please forgive me, sara!
i love you!

下面是我写的代码
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    static char a[10000];
    while(gets(a)!=NULL)
    {
        for (int t=0; t<strlen(a); t++)
        {
            if (a[t]=='b') a[t]=' ';
            if (a[t]=='q') a[t]=',';
            if (a[t]=='t') a[t]='!';
            if (a[t]=='m') a[t]='l';
            if (a[t]=='i') a[t]='e';
            if (a[t]=='c') a[t]='a';
            if (a[t]=='a') a[t]='c';
            if (a[t]=='e') a[t]='i';
            if (a[t]=='l') a[t]='m';
        }
        puts(a);
    }
    return 0;
}
可是我将示例数据输入之后却发现输出了这个结果
pmicsi forgivi mi, scrc!
看来是仅仅把b换成了空格。
当我把从第二个if开始都加上else之后就正常了……
请教一下这是为什么呢?不胜感激!!!!
搜索更多相关主题的帖子: please 字符串 加密 
2015-10-22 00:17
Spy001
Rank: 9Rank: 9Rank: 9
来 自:山那边
等 级:贵宾
威 望:10
帖 子:138
专家分:1360
注 册:2015-1-23
收藏
得分:0 
if(A) {
…… //条件A为真,执行这里
}
else if(B) {
.....//条件B为真,执行这里
}
else if(C) {
.....//条件C为真,执行这里
}
else if(D) {
.....//条件D为真,执行这里
}else{
.....//以上A、B、C、D都不为真时,执行这里
}

if的意思是“如果当”, else if的意思是指“另外如果”,最后一个else指的是除去以前所有的剩下的情况
这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句, 并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else 语句n。最后这个else常起着缺省条件的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用{和}把这些语句包括在其中。
条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。

千百年之后,谁又还记得谁........
2015-10-22 00:45
库特莉亚芙卡
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-10-22
收藏
得分:0 
回复 2楼 Spy001
谢谢。
那请问为什么不能直接多条if并列呢?
2015-10-22 07:14
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
加一个字符变量过渡就没问题了
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    static char a[10000],b;
    while(gets(a)!=NULL)
    {
        for (int t=0; t<strlen(a); t++)
        {
            b=a[t];
            if (b=='b') a[t]=' ';
            if (b=='q') a[t]=',';
            if (b=='t') a[t]='!';
            if (b=='m') a[t]='l';
            if (b=='i') a[t]='e';
            if (b=='c') a[t]='a';
            if (b=='a') a[t]='c';
            if (b=='e') a[t]='i';
            if (b=='l') a[t]='m';
        }
        puts(a);
    }
    return 0;
}

能编个毛线衣吗?
2015-10-22 08:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
长度不超过10000的字符串。 ------ 那就应该开 a[10000+1]
另外,gets这个函数已经被废弃了。算了,既然你能提交成功,那就算正确吧
程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    for( char a[10001]; gets(a); )
    {
        for( char* p=a; *p; ++p )
        {
            switch( *p )
            {
            case 'b': *p=' '; break;
            case 'q': *p=','; break;
            case 't': *p='!'; break;
            case 'm': *p='l'; break;
            case 'i': *p='e'; break;
            case 'c': *p='a'; break;
            case 'a': *p='c'; break;
            case 'e': *p='i'; break;
            case 'l': *p='m'; break;
            }
        }
        puts( a );
    }
    return 0;
}

2015-10-22 09:53
快速回复:if 和 else if 的执行结果不同求教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025111 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved