println!("Четвёртый элемент: {}", xs[3]);
// ИСПРАВЬТЕ ^ Закомментируйте эту строку
// По векторами легко итерироваться
println!("Содержимое `xs`:");
for x in xs.iter() {
println!("> {}", x);
}
// Также можно итерироваться по вектору с получением индекса элемента
// (который будет содержаться в отдельной переменной `i`)
for (i, x) in xs.iter().enumerate() {
println!("{}-ый элемент имеет значение {}", i, x);
}
// Благодаря `iter_mut`, у изменяемых векторов можно менять значения
// во время итерирования
for x in xs.iter_mut() {
*x *= 3;
}
println!("Обновлённый вектор: {:?}", xs);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Подробную информацию о методах объекта Vec можно почитать в разделе модуля std::vec
В Rust есть два типа строк: String и &str.
String сохраняется как вектор байт (Vec<u8>), но с гарантией, что это всегда будет действительная UTF-8 последовательность. String выделяется в куче, расширяемая и не заканчивается нулевым байтом (не null-terminated).
&str - это срез (&[u8]), который всегда указывает на действительную UTF-8 последовательность, и является отображением String, так же как и &[T] - отображение Vec<T>.
fn main() {
// (все аннотации типов избыточны)
// Ссылка на строку, размещённую в read-only памяти
let pangram: &'static str = "the quick brown fox jumps over the lazy dog";
println!("Pangram: {}", pangram);
// Итерируемся по словам в обратном прядке, новая строка не аллоцируется
println!("Words in reverse");
for word in pangram.split_whitespace().rev() {
println!("> {}", word);
}
// Копируем символы в вектор, сортируем и удаляем дубликаты
let mut chars: Vec<char> = pangram.chars().collect();
chars.sort();
chars.dedup();
// Создаём пустую расширяемую `String`
let mut string = String::new();
for c in chars {
// Добавляем символ в конец строки
string.push(c);
// Добавляем в конец строки другую строку
string.push_str(", ");
}
// Усечённая строка - это срез оригинальной строки, а значит новых
// аллокаций не производится
let chars_to_trim: &[char] = &[' ', ','];
let trimmed_str: &str = string.trim_matches(chars_to_trim);
println!("Used characters: {}", trimmed_str);
// Строка, аллоцированная в куче
let alice = String::from("I like dogs");
// Выделяется новая память, в которую сохраняется модифицированная строка
let bob: String = alice.replace("dog", "cat");
println!("Alice says: {}", alice);
println!("Bob says: {}", bob);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Больше методов str и String вы можете найти в описании модулей std::str и std::string.
Есть несколько способов написать строковый литерал со специальными символами в нём. Все способы приведут к одной и той же строке, так что лучше использовать тот способ, который легче всего написать. Аналогично все способы записать строковый литера из байтов в итоге дадут &[u8; N].
Обычно специальные символы экранируются с помощью обратной косой черты: \. В этом случае вы можете добавить в вашу строку любые символы, даже непечатаемые и те, которые вы не знаете как набрать. Если вы хотите добавить обратную косую черту, экранируйте его с помощью ещё одной: \\.
Строковые или символьные разделители литералов (кавычки, встречающиеся внутри другого литерала, должны быть экранированы: "\"", '.'.
fn main() {
// Вы можете использовать экранирование для записи байтов