我的程序编码和解码文本。编码部分是成功的,但是解码部分不能工作。
逻辑非常简单;取代码直到x (您可以想象,x就像CSV中的逗号一样),在字典中找到它并将它添加到变量中。
cl01xcl01 => aa
----|----
a | a
V
Delimiter但它会抛出错误:
[hoovy@turbine Coder]$ cargo build
Compiling bimap v0.6.1
Compiling Coder v0.1.0 (/home/hoovy/.Projeler/Programlama/Rust/Coder)
error[E0277]: the trait bound `&str: Borrow<char>` is not satisfied
--> src/Coder.rs:185:57
|
185 | decoded = format!("{}{}",result_raw,letters.get_by_right(&code).unwrap());
| ^^^^^^^^^^^^ the trait `Borrow<char>` is not implemented for `&str`
For more information about this error, try `rustc --explain E0277`.
error: could not compile `Coder` due to previous error
[hoovy@turbine Coder]$注:我用的是双尾箱。
//-------------------------//
#![allow(non_snake_case)]
//-------------------------//
#![allow(dead_code)]
//-------------------------//
#![allow(unused_variables)]
//-------------------------//
#![allow(unused_imports)]
//-------------------------//
#[cfg(doc)] #[doc = include_str!("../Changelog.md")] pub mod _changelog{}
use std::io;
use bimap::BiMap;
use std::process::exit;
fn input() -> String {
let mut input = String::new();
println!("Enter the text that you want to encrypt:");
match io::stdin().read_line(&mut input) {
Ok(_) => {
return input.to_string();
},
Err(e) => {
return e.to_string();
}
}
}
fn coder(flag: &char) -> String {
let mut letters = BiMap::<char, &str>::new();
letters.insert('a',"cl01");
letters.insert('b',"cl02");
letters.insert('c',"cl03");
letters.insert('d',"cl04");
letters.insert('e',"cl05");
letters.insert('f',"cl06");
letters.insert('g',"cl07");
letters.insert('h',"cl08");
letters.insert('i',"cl08");
letters.insert('j',"cl09");
letters.insert('k',"cl10");
letters.insert('l',"cl11");
letters.insert('m',"cl12");
letters.insert('n',"cl13");
letters.insert('o',"cl14");
letters.insert('p',"cl15");
letters.insert('r',"cl16");
letters.insert('s',"cl17");
letters.insert('t',"cl18");
letters.insert('u',"cl19");
letters.insert('v',"cl20");
letters.insert('y',"cl21");
letters.insert('z',"cl22");
letters.insert('w',"egl01");
letters.insert('q',"egl02");
letters.insert('x',"egl03");
letters.insert('ö',"tgl01");
letters.insert('ü',"tgl02");
letters.insert('ß',"gl01");
letters.insert('ä',"gl02");
letters.insert('ç',"tl01");
letters.insert('ğ',"tl02");
letters.insert('ı',"tl03");
letters.insert('ş',"tl04");
letters.insert('û',"tl05");
letters.insert('î',"tl06");
letters.insert('ô',"tl07");
letters.insert('â',"tl08");
letters.insert('A',"clu01");
letters.insert('B',"clu02");
letters.insert('C',"clu03");
letters.insert('D',"clu04");
letters.insert('E',"clu05");
letters.insert('F',"clu06");
letters.insert('G',"clu07");
letters.insert('H',"clu08");
letters.insert('I',"clu08");
letters.insert('J',"clu09");
letters.insert('K',"clu10");
letters.insert('L',"clu11");
letters.insert('M',"clu12");
letters.insert('N',"clu13");
letters.insert('O',"clu14");
letters.insert('P',"clu15");
letters.insert('R',"clu16");
letters.insert('S',"clu17");
letters.insert('T',"clu18");
letters.insert('U',"clu19");
letters.insert('V',"clu20");
letters.insert('Y',"clu21");
letters.insert('Z',"clu22");
letters.insert('W',"eglu01");
letters.insert('Q',"eglu02");
letters.insert('X',"eglu03");
letters.insert('Ö',"tglu01");
letters.insert('Ü',"tglu02");
letters.insert('ß',"glu01");
letters.insert('Ä',"glu02");
letters.insert('Ç',"tlu01");
letters.insert('Ğ',"tlu02");
letters.insert('I',"tlu03");
letters.insert('Ş',"tlu04");
letters.insert('Û',"tlu05");
letters.insert('Î',"tlu06");
letters.insert('Ô',"tlu07");
letters.insert('Â',"tlu08");
letters.insert(' ',"pl01");
letters.insert('\n',"pl02");
letters.insert('\"',"pl03");
letters.insert('!',"pl04");
letters.insert('^',"pl05");
letters.insert('#',"pl06");
letters.insert('+',"pl07");
letters.insert('$',"pl08");
letters.insert('%',"pl09");
letters.insert('/',"pl10");
letters.insert('{',"pl11");
letters.insert('(',"pl12");
letters.insert('[',"pl13");
letters.insert(')',"pl14");
letters.insert(']',"pl15");
letters.insert('=',"pl16");
letters.insert('}',"pl17");
letters.insert('?',"pl18");
letters.insert('*',"pl19");
letters.insert('\\',"pl20");
letters.insert('-',"pl21");
letters.insert('_',"pl22");
letters.insert('@',"pl23");
letters.insert('€',"pl24");
letters.insert('¶',"pl25");
letters.insert('₺',"pl26");
letters.insert('←',"pl27");
letters.insert('¨',"pl28");
letters.insert('~',"pl29");
letters.insert('ª',"pl30");
letters.insert('™',"pl31");
letters.insert('\'',"pl32");
letters.insert(';',"pl33");
letters.insert('`',"pl34");
letters.insert(',',"pl35");
letters.insert('«',"pl36");
letters.insert('»',"pl37");
letters.insert('¢',"pl38");
letters.insert('“',"pl39");
letters.insert('”',"pl40");
letters.insert('µ',"pl41");
letters.insert('®',"pl42");
letters.insert('·',"pl43");
letters.insert('˙',"pl44");
letters.insert('¨',"pl45");
letters.insert('.',"pl46");
let ipt = input().trim_end().to_string();
let ipt_char = ipt.chars();
let mut result_raw = String::new();
let result = String::new();
let mut decoded = String::new();
if *flag == 'e'
{
for letter in ipt_char
{
result_raw = format!("{}x{}",result_raw,letters.get_by_left(&letter).unwrap());
}
let result = &result_raw[1..];
return result.to_string();
}
else if *flag == 'd'
{
for code in ipt_char
{
decoded = format!("{}{}",result_raw,letters.get_by_right(&code).unwrap());
}
return decoded;
}else
{
return "darn".to_string();
}
}
fn main(){
let a = coder(&'d');
println!("{}",a)
}发布于 2022-01-09 21:23:05
这会将编码和解码分割开来,这样它们就不会都试图逐个解析字符。
...
letters.insert('¨', "pl45");
letters.insert('.', "pl46");
let ipt = input().trim_end().to_string();
if *flag == 'e'
{
let ipt_char = ipt.chars();
let mut result_raw = String::new();
let result = String::new();
for letter in ipt_char
{
result_raw = format!("{}x{}", result_raw, letters.get_by_left(&letter).unwrap());
}
let result = &result_raw[1..];
return result.to_string();
} else if *flag == 'd'
{
let mut result_raw = String::new();
for code in ipt.split('x') {
// You might want to have a look at the `String.push_str()` function to avoid creating a new string every time
result_raw = format!("{}{}", result_raw, letters.get_by_right(code).unwrap());
}
let decoded = result_raw;
return decoded;
} else {
return "darn".to_string();
}
...https://stackoverflow.com/questions/70644110
复制相似问题