标题:C++中有一个for循环无错误,但无法实现,求解答??急!!!红字那段
只看楼主
vivien薄荷芯
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-11-11
结帖率:100%
已结贴  问题点数:20 回复次数:7 
C++中有一个for循环无错误,但无法实现,求解答??急!!!红字那段
#include<iostream>
#include<string>
using namespace std;

int main()
{   
    void JiaMi(char ZhiHuan[]);                                 //加密函数
    void setZhiHuan(char ZhiHuan[]);      //设置置换表函数
    char ZhiHuanBiao['z'+1];                                //正向置换表,加密时用                                             
    setZhiHuan(ZhiHuanBiao);
    JiaMi(ZhiHuanBiao);                                                        //设置置换表
    return 0;
}

void JiaMi(char ZhiHuan[])                                 //加密
{  
    string MingWen;                                        //保存明文
    cout<<endl<<"请输入明文:";
    getline(cin,MingWen);                                   //读入明文
    cout<<MingWen<<endl;        
    cout<<"加密后的密文为:"<<endl;
    for(int i=0; i<MingWen.length(); i++)                  //直接利用置换表输出密文
    {
        if(MingWen[i]>='a' && MingWen[i]<='z')
            cout<<ZhiHuan[ MingWen[i] ];
        else cout<<MingWen[i];
   
}
}


void setZhiHuan(char ZhiHuanBiao[])
{
    int i;                                               //i和j是循环变量,除此之外没有任何意义
    char j;
    string s;                                            //密钥
    cout<<"请输入密钥:";
    cin>>s;
    cout<<s<<endl;                                       //输出密钥
    cout<<"置换表为:"<<endl;
    string s1;               
    for(i = 0 ; i < s.length();i++)                      //对密钥进行处理(去掉空格和重复的字符)
    {
        bool sign =0;                                    //标志变量
        if(s[i] >= 'a' && s[i] <='z')
        {
            for(int j = 0; j < s1.length();j++)
            {
                if(s[i] == s1[j])
                {
                    sign = 1;
                    break;
                }
            }
            if(sign == 0) s1 = s1 + s[i];
            else sign = 0;
        }
    }
    for( j ='a';j<='z';j++)cout<<j<<" ";cout<<endl;    //输出小写字母 从a到z   
    char ch='a';
    for( i = 'a' ;i <= 'z'; i++)                      //该循环利用密钥得到置换表
    {
        if(i < 'a' + s1.length())                     //前面直接用s1代替
        {
            ZhiHuanBiao[i] = s1[i-'a'];        
        }
        else                                          //后面将剩下的"贴"上去
        {
            
            for(int j = 'a'; j < 'a' + s1.length(); j++)
            {
                if(ch == ZhiHuanBiao[j])
                {
                    ch++;
                    j= 'a';                           //每次都从头开始搜索
                    continue;
                }
            }
            ZhiHuanBiao[i] = ch;
            ch++;
        }
        cout<<ZhiHuanBiao[i]<<" ";                    //同时输出置换表
    }
    cout<<endl;
}

搜索更多相关主题的帖子: void include return 
2012-11-11 10:34
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:20 
cout<<endl<<"请输入明文:";

    cin.ignore();
    getline(cin,MingWen);
2012-11-11 11:37
vivien薄荷芯
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-11-11
得分:0 
Thank you !!不过,加上之后是可以运行了,但密钥中间不能有空格了??why?
2012-11-11 12:33
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
用getline取密钥呀。getline默认是以回车为结束符,可以允许中间带空格的输入。
cin >> str;只能得到空格前的字符串。
2012-11-11 12:42
vivien薄荷芯
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-11-11
得分:0 
太感激了!!就是密钥输入后要按两次回车才出现置换表,明文也是按两次才能输出密文。why??
2012-11-11 12:52
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
你编译器问题,估计你用的是VC6,大概会出现这个二次回车的问题。
如果用cin.getline的话,就不会出现这个问题,但失去了使用string的灵活性。
2012-11-11 13:24
vivien薄荷芯
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-11-11
得分:0 
厉害厉害~~我终于可以把这份作业交了!
Thank you!!
2012-11-13 09:45
xiangbei90
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:20
专家分:109
注 册:2012-11-13
得分:0 
学习了。
2012-11-13 10:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386696-1-1.html




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

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