Решение на упр.02 задача 3 от Георги Стоянов

Обратно към всички решения

Към профила на Георги Стоянов

Резултати

  • 1 точка от тестове
  • 0 бонус точки
  • 1 точка общо
  • 1 успешни тест(а)
  • 0 неуспешни тест(а)

Код

fn split_string_at(s: String, n: usize) -> (String, String) {
let first_string = String::from(&s[0..n]);
let second_string = String::from(&s[n..]);
(first_string, second_string)
}
/*
Тук ще трябва да връщаме String-ове, защото нямаме аргумент във функцията от тип &str, към който да подадем стойност и да я върнем. Ако first_string и second_string бяха от тип &str, нямаше да можем да ги върнем за други две променливи да ги използват, защото когато приключи функцията техните стойности ще бъдат изтрити т.е. няма да има стойности, които да бъдат присвоени от променливи във фунцкията main.
*/
fn split_slice_at(s: &str, n: usize) -> (&str, &str) {
let first_string = &s[0..n];
let second_string = &s[n..];
(first_string, second_string)
}
/*
Тук вече имаме променлива, чиито живот е по-голям от дадената функция, затова можем спокойно да върнем &str, които да сочат към този аргумент и first_string и second_string ще могат да бъдат присвоени и използвани извън докато е жив s
*/
fn split_slice_mut_at(s: &mut String, n: usize) -> (&str, &str) {
let first_string = &s[0..n];
let second_string = &s[n..];
(first_string, second_string)
}
/*
&str e тип референция, която по природа е immutable и това няма как да се промени. Единственият начин да успеем да направим нещо подобно е да използваме &mut String, защото това е променлива от тип Стринг, чиято референция ние сме взели и щом тя е декларирана и подадена като mutable, значи ще можем да я приемем и да променяме както решим.
*/
fn main() {
let mut s = String::from("Hello world");
split_slice_mut_at(&mut s, 3);
}

Лог от изпълнението

Updating crates.io index
     Locking 17 packages to latest compatible versions
   Compiling proc-macro2 v1.0.102
   Compiling unicode-ident v1.0.20
   Compiling quote v1.0.41
   Compiling futures-sink v0.3.31
   Compiling futures-core v0.3.31
   Compiling futures-channel v0.3.31
   Compiling pin-utils v0.1.0
   Compiling slab v0.4.11
   Compiling syn v2.0.108
   Compiling futures-io v0.3.31
   Compiling pin-project-lite v0.2.16
   Compiling futures-task v0.3.31
   Compiling memchr v2.7.6
   Compiling solution v0.1.0 (/tmp/d20251023-1757769-1rm1edx/solution)
warning: function `split_string_at` is never used
 --> src/lib.rs:1:4
  |
1 | fn split_string_at(s: String, n: usize) -> (String, String) {
  |    ^^^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: function `split_slice_at` is never used
  --> src/lib.rs:10:4
   |
10 | fn split_slice_at(s: &str, n: usize) -> (&str, &str) {
   |    ^^^^^^^^^^^^^^

warning: function `split_slice_mut_at` is never used
  --> src/lib.rs:19:4
   |
19 | fn split_slice_mut_at(s: &mut String, n: usize) -> (&str, &str) {
   |    ^^^^^^^^^^^^^^^^^^

warning: function `main` is never used
  --> src/lib.rs:28:4
   |
28 | fn main() {
   |    ^^^^

warning: `solution` (lib) generated 4 warnings
   Compiling futures-macro v0.3.31
   Compiling futures-util v0.3.31
   Compiling futures-executor v0.3.31
   Compiling futures v0.3.31
warning: function `split_slice_mut_at` is never used
  --> tests/../src/lib.rs:19:4
   |
19 | fn split_slice_mut_at(s: &mut String, n: usize) -> (&str, &str) {
   |    ^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(dead_code)]` on by default

warning: function `main` is never used
  --> tests/../src/lib.rs:28:4
   |
28 | fn main() {
   |    ^^^^

warning: `solution` (test "solution_test") generated 2 warnings
    Finished `test` profile [unoptimized + debuginfo] target(s) in 14.03s
     Running tests/solution_test.rs (target/debug/deps/solution_test-fc1324dc0157cdc7)

running 1 test
test solution_test::test_basic ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

История (1 версия и 0 коментара)

Георги качи първо решение на 16.10.2025 19:25 (преди 14 дена)