[英]Rust "the trait `Borrow<char>` is not implemented for `&str`" Error
My programs code and decode the texts.我的程序对文本进行编码和解码。 The coding part was succesful but decoding part doesn't work.编码部分成功,但解码部分不起作用。
The logic is so simple;逻辑很简单; take code until come x
(you can imagine, x is delimeter as like comma from CSV), find in dictionary and add it to variable.取代码直到x
(你可以想象,x 是分隔符,就像 CSV 中的逗号一样),在字典中找到并将其添加到变量中。
cl01xcl01 => aa
----|----
a | a
V
Delimiter
But it throws error:但它会引发错误:
[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]$
NOTE: I used bimap crate.注意:我使用了 bimap 板条箱。
//-------------------------//
#![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)
}
This splits up the encoding and decoding so that they are not both trying to parse character by character.这将编码和解码分开,这样它们就不会试图逐个字符地解析。
...
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();
}
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.