Ceasar Cypher不会计算空格

时间:2019-07-07 01:47:52

标签: c++

我正在编写一个具有4种不同功能的程序,其中一个询问用户是否要进行编码/解码,另一个询问用户在动态内存中输入字符串,实际的解密功能以及输出功能。我做了所有事情,但是我唯一的问题是考虑输入的单词中是否有空格。

在解密函数中,我写道,如果给定单词​​的索引有空格,则它将继续并跳过该索引。编辑:我现在包括了输入功能和输出功能,可以读取单词并对其进行加密。

string *input(){
  string *temp = new string;
  cout<<"What is the word: ";
  getline(cin, *temp);
  cin >> *temp;
  return temp;
}
string output(string *in){
  string cypher;
  cypher = decryption(*in);
  cout<<"Result: "<<cypher<<endl;
  return cypher;
}

string decryption(string in){
  int inputSize = in.size();
  int index = 0;
  while(index != inputSize){
    if(in[index] == ' '){//possibly something wrong with this if statement
      index++;
    }else if(in[index] >= 97 && in[index] <= 109){
      in[index]= in[index]+13;
    }else if(in[index] >=110 && in[index] <=122){
      in[index] = in[index]-13;
    }else if(in[index] >=65 && in[index] <=77){
      in[index] = in[index]+13;
    }else if(in[index] >=78 && in[index] <=90){
      in[index] = in[index]-13;
    }
    index++;
  }
  return in;
}

预期结果: 输入“ e”或“ d”进行编码或解码。要退出的其他键:e 单词是什么:字母 结果:nycunorg

输入'e'或'd'进行编码或解码。要退出的其他键:e 单词是什么:TAF VF 结果:GNS是

到目前为止,我的结果是: 输入“ e”或“ d”进行编码或解码。要退出的其他键:e 单词是什么:TAF VF 结果:GNS

1 个答案:

答案 0 :(得分:3)

遇到空格时,您可以有效地递增index两次-一次在该if子句中,再一次在循环结束时。这样做的最终效果是跳过(保留未编码的字符)空格后的字符。

只需删除整个if(in[index] == ' ')子句。其余代码已经使不属于四个特别检查范围(包括空格)的所有字符保持不变。