首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换字符串(Rust)中的值?

如何替换字符串(Rust)中的值?
EN

Stack Overflow用户
提问于 2022-08-01 20:44:07
回答 1查看 130关注 0票数 0

我是生锈的新手,作为一个选秀,我正在尝试做一个终端服务器的应用。在编写菜单选择部分时,我发现用于获取用户输入的字符串变量具有“加性行为”,即它不会用新值覆盖旧值,是否有一种无需使用不安全方法来刷新字符串的方法?

守则如下:

代码语言:javascript
复制
//Dependencies
use std::io::stdin;
use std::ffi::OsString;

fn main()
{

    bifrost_menu();

}

fn bifrost_menu()  
{
    //mutable input string
    let mut line = String::new();
    let mut opt = String::new();
    let mut _press = String::new();
    loop 
    {
        //Selection Menu
        println!("                   Bienvenido al menu de Bifrost");
        //selection menu
        println!("Elija una opcion :");
        println!("    1. Acceso a monitor de estado");
        println!("    2. Acceso a dispositivos");
        println!("    3. salir del menu");
    
        //user input
        stdin().read_line(&mut line)
            .ok()
            .expect("Fallo al ingresar opcion");
        //trim aquired string
        if opt.len() >1
        {
            opt.remove(0);
        }
        opt = trim_input (&mut line);
        println!("{} witness print",opt);
        match opt.as_str()
        {
            "1" => {heimdall_menu();},
            "2" => {midgar_menu();},
            "3" => {break},
            _ => {println!("ERROR : por favor ingrese una opcion valida\nPresione cualquier tecla para continuar ...");
                            //user input
                            stdin().read_line(&mut _press)
                                .ok()
                                .expect("Fallo al ingresar opcion");},
        }
        opt = String::new();
    }
    
}

fn heimdall_menu()
{
    //mutable input string
    let mut line = String::new();
    //Selection Menu
    println!("                   Bienvenido al menu de Heimdall");
    //selection menu
    println!("Elija una opcion :");
    println!("    1. Reachability test");
    println!("    2. SNMP quick monitoring");
    println!("    3. Volver al menu anterior");

    //user input
    stdin().read_line(&mut line)
        .ok()
        .expect("Fallo al ingresar opcion");
    //trim aquired string
    let opt = trim_input (&mut line);
}

fn midgar_menu()
{
    //mutable input string
    let mut line = String::new();
    //Selection Menu
    println!("                   Bienvenido al menu de Midgar");

    //selection menu
    println!("Elija una opcion :");
    println!("    1. Acceso a equipos");
    println!("    2. Acceso a backups");
    println!("    3. Volver al menu anterior");
    
    //user input
    stdin().read_line(&mut line)
        .ok()
        .expect("Fallo al ingresar opcion");
    //trim aquired string
    let opt = trim_input (&mut line);

}

fn trim_input (s: &mut String) ->String
{
    if s.ends_with('\n')
    {
        s.pop();
    }
    if s.ends_with('\r')
    {
        s.pop();
    }
    s.starts_with('1');
    return s.to_string();
}

此脚本的输出如下:

代码语言:javascript
复制
~/testfields/rust$ ./input_test 
                   Bienvenido al menu de Bifrost
Elija una opcion :
    1. Acceso a monitor de estado
    2. Acceso a dispositivos
    3. salir del menu
1
1 witness print
                   Bienvenido al menu de Heimdall
Elija una opcion :
    1. Reachability test
    2. SNMP quick monitoring
    3. Volver al menu anterior
2
                   Bienvenido al menu de Bifrost
Elija una opcion :
    1. Acceso a monitor de estado
    2. Acceso a dispositivos
    3. salir del menu
3
13 witness print
ERROR : por favor ingrese una opcion valida
Presione cualquier tecla para continuar ...

最后的“证人印”应该是"3“而不是"13”,有没有办法用"3“来覆盖"1”?

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 05:48:13

您应该在每次迭代结束时(或开始时)调用line.clear(),这比在循环中移动变量要好,因为这样做会导致更多的分配(这比使用字符串的clear更昂贵)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73199403

复制
相关文章

相似问题

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