首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“由于‘& not `’错误未实现性状`Borrow<char>`

“由于‘& not `’错误未实现性状`Borrow<char>`
EN

Stack Overflow用户
提问于 2022-01-09 18:07:52
回答 1查看 209关注 0票数 0

我的程序编码和解码文本。编码部分是成功的,但是解码部分不能工作。

逻辑非常简单;取代码直到x (您可以想象,x就像CSV中的逗号一样),在字典中找到它并将它添加到变量中。

代码语言:javascript
复制
cl01xcl01 => aa
----|----
 a  | a
    V
    Delimiter

但它会抛出错误:

代码语言:javascript
复制
[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]$

注:我用的是双尾箱。

代码语言:javascript
复制
//-------------------------//
#![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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-09 21:23:05

这会将编码和解码分割开来,这样它们就不会都试图逐个解析字符。

代码语言:javascript
复制
...
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();
}
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70644110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档