Как разделить строку в Rust, которую я использую для чтения! () - PullRequest
1 голос
/ 13 октября 2019

Я хочу разделить String, который я даю в качестве ввода, в соответствии с пробелами в нем. Я использовал функцию split_whitespaces(), но когда я использую эту функцию для пользовательского ввода, он просто дает мне первый String фрагмент.

let s:String = read!();
let mut i:usize = 0;
for token in s.split_whitespace() {
    println!("token {} {}", i, token);
    i+=1;
}

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Насколько я знаю, read! - это не стандартный макрос. Быстрый поиск показывает, что это, вероятно, из ящика text_io (если вы используете внешние ящики, вы должны указать это в вопросе).

Из документов в этом ящике:

Макрос read!() всегда будет читать до следующего символа пробела ascii (\n, \r, \t или пробел).

Итак, что вывидим это по замыслу.

Если вы хотите прочитать всю строку из stdin, вы можете попробовать стандартную функцию std::Stdin::read_line.

0 голосов
/ 13 октября 2019

Вам не хватает тестовых случаев, которые могли бы найти источник проблемы. Разделите код на функцию и замените read!() -macro на контрольный пример, который вы сейчас можете добавить в main, где вы предоставляете различные строки для функции и наблюдаете за выводом.

fn strspilit(s:String){
    let mut i:usize = 0;
    for token in s.split_whitespace() {
        println!("token {} {}", i, token);
        i+=1;
    }
}


fn main() {
    println!("Hello, world!");
    strspilit("Hello Huge World".to_string());

}

Тогда вы увидите, что ваш код работает как надо , но, как видно из других ответов макрос read! () Возвращает строку только до первого пробела, поэтому вам, вероятно, следует использовать другой способ чтения ввода. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...