例如,假设您有一条加密文本消息"ASBBU KQMCF"
in input.txt
,当您解密它时,它将变为output.txt
in "HELLO WORLD"
。
如您所见,"A"
变为"H"
,"S"
变为"E"
,"B"
变为"L"
,"U"
变为"O"
,"K"
变为"W"
,"Q"
变为"O"
,"M"
变为"R"
,"C"
变为"L"
,并且"F"
变为"D"
。
问题是,当我解密整个文本时,它是完整的,没有空格,看起来像这样:"HELLOWORLD"
,但它必须如下所示:"HELLO WORLD"
。是否可以读取文本并解密它,同时保留单词之间的空格?
我写了一段代码,可以读取一个字母并将其更改为正确的字母,如代码中所示,但我不知道如何在单词之间添加空格。
下面是我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
char ch;
ifstream read("input.txt");
ofstream write("output.txt");
while(read>>ch){
switch (ch) {
case 'A':
ch='H';
write<<ch;
}
switch(ch){
case 'S':
ch='E';
write<<ch;
}
switch(ch){
case 'B':
ch='L';
write<<ch;
}
switch(ch){
case 'U':
ch='O';
write<<ch;
}
switch(ch){
case 'K':
ch='W';
write<<ch;
}
switch(ch){
case 'Q':
ch='O';
write<<ch;
}
switch(ch){
case 'M':
ch='R';
write<<ch;
}
switch(ch){
case 'C':
ch='L';
write<<ch;
}
switch(ch){
case 'F':
ch='D';
write<<ch;
}
}
read.close();
write.close();
return 0;
}
2条答案
按热度按时间yhxst69z1#
默认情况下,
operator>>
跳过前导空格,然后读取,直到遇到空格为止。因此,您的代码将永远不会在ch
变量中看到空格字符。由于您希望保留空白,因此应该使用
std::getline()
而不是operator>>
。将文件逐行读入std::string
,然后可以根据需要操作每个std::string
中的字符。此外,您还误用了
switch
。您不需要为每个case
使用单独的switch
。这并不比使用一堆if-else
块更好。您可以在单个switch
中使用多个case
(这是它的主要设计-从多个选择中进行选择)。试试这个:
另外,顺便提一句:您的"加密"存在缺陷-您将
B
和C
"加密"到L
中,将Q
和U
"加密"到O
中。这意味着如果L
和/或O
存在,您将在"解密"时丢失数据,因为您不知道要将它们"解密"回哪些原始字符。每个唯一的输入字符都需要一个唯一的输出字符。xeufq47z2#
我不知道你想做什么。
但是就像我之前看到的,你可以做唯一的开关。
并使用默认情况,其中u写入实际字符,如
第一个月
在这个例子中,我使用switch来打印helloworld并更改一些字母
您认为可以重用此示例来解决您的问题吗?