Bei der Programmierung dreht sich alles um Problemlösung. Es gibt keine Möglichkeit, ein kompetenter Programmierer zu werden, ohne Dinge zu üben und zu bauen. In diesem Artikel werden wir Projekte erstellen, die Sie in die Rust -Programmiersprache beginnen.
Holen Sie sich die größte Saite
Das erste Programm versucht, die größte Zeichenfolge aus zwei String -Paaren zu bestimmen. Der Beispielquellcode ist wie unten gezeigt:
fn größte<'a>(Str1: & 'a str, str2: &' a str) -> & 'a str
Wenn Str1.len ()> str2.len ()
STR1
anders
STR2
fn main ()
Sei Str1 = "Hallo";
Sei str2 = "LinuxHint";
Ergebnis = größter (Str1, str2);
println!("Größte: ", Ergebnis);
Kompress -Verzeichnis in Tarball komprimieren
Das zweite Programm komprimiert das bereitgestellte Verzeichnis in einen Tarball. Das Beispiel für Quellcode ist wie gezeigt:
NOTIZ: Dieser Code erfordert die Flate2 -Komprimierung/Dekompressionsbibliothek.
Verwenden Sie STD :: FS :: Datei;
Verwenden Sie Flate2 :: Komprimierung;
Verwenden Sie FLATE2 :: Write :: GZECODER;
fn main () -> Ergebnis<(), std::io::Error>
Lassen Sie GZ = Datei :: Create ("Archiv.Teer.GZ ");
lass ccoder = gzenCoder :: new (gz, compression :: default ());
lass mut tar = tar :: builder :: new (ENC);
// Fügen Sie alle Dateien im aktuellen Verzeichnis zu Current_backup hinzu
Teer.append_dir_all ("."," current_backup ")?;
OK(());
Tarball dekomprimieren
Als nächstes kommt ein Programm zur Dekomprimierung eines Tarballs. Der Quellcode ist wie unten gezeigt:
Verwenden Sie STD :: FS :: Datei;
Verwenden Sie std :: path :: pathbuf;
Verwenden Sie Flate2 :: Lesen :: GZENCODER;
Verwenden Sie Tar :: Archiv;
Verwenden Sie STD :: ERROR :: ERROR;
fn main () -> Ergebnis<(), Box
>
lass File = Datei :: Open ("Pfad/to/Archive.Teer.GZ ")?;
lass mut archive = archive :: new (gzenCoder :: new (Datei));
println!("Extrahiert:");
Archiv
.Einträge ()?
.filter_map (| e | e.OK())
.MAP (| Mut -Eintrag | -> Ergebnis>
Pfad = Eingabe lassen.Weg()?.to_owned ();
OK (Pfad.to_path_buf ())
)
.filter_map (| e | e.OK())
.for_each (| x | println!("> ", x.Anzeige()));
OK(())
Suchen Sie alle TXT -Dateien in einem Verzeichnis
Das nächste Programm, das wir erstellen können, ist eines, das alle TXT -Dateien in einem Verzeichnis findet: Der Code ist wie unten angegeben:
Verwenden Sie Globe :: Glob;
Verwenden Sie STD :: ERROR :: ERROR;
fn main () -> Ergebnis<(), Box>
für Artikel in Glob ("**/*.txt")?
println!("", Artikel?.Anzeige());
OK(())
Zufällige Zahlen generieren
Ein einfaches Programm zur Generierung von Zufallszahlen.
Verwenden Sie Rand :: RNG;
fn main ()
mut range = rand :: thread_rng ();
Sei num: i32 = Bereich.Gen ();
println!("Random: ", n1);
Passwortgenerator
Wir können einen Passwortgenerator erstellen, indem wir zufällige alphanumerische Zeichen generieren. Code ist wie gezeigt:
Verwenden Sie Rand :: RNG;
const charset: & [u8] = b "abcdefghijklmnopqrstuvwxyz \
abcdefghijklmnopqrstuvwxyz \
0123456789) (*&^%$#@!";
const len: i32 = 25;
fn main ()
lass mut rng = rand :: thread_rng ();
Passwort lassen: String = (0… Len)
.map (| _ |
lass idx = rng.Gen_range (0… Charset.len ());
Charset [idx] als char
)
.sammeln();
println!("Passwort: ", Passwort);
Lesen Sie CSV
Das nächste Programm ist das Lesen einer CSV -Datei. Der Code ist ein gezeigt:
Verwenden Sie CSV :: Fehler;
fn main () -> Ergebnis<(), Error>
lass csv_data = "
101, Edith, Masao, [email protected], Kolumbien, Arzt
102, Kellen, Yusuk, [email protected], Nicaragua, Polizist
";
Lassen Sie Mut reader = csv :: reader :: from_reader (csv_data.As_Bytes ());
Für die Zeile im Leser.records ()
lass row = row?;
println!(
"ID | FirstName: | LastName: | E -Mail: | Land: | Beruf: |",
& Row [0],
& Row [1],
& Row [2],
& Row [3],
& Row [4],
& Row [5],
);
OK(())
Anzahl der CPU -Kerne
Holen Sie sich die Anzahl der logischen CPU -Kerne im Programm:
fn main ()
println!("CPU -Kerne: ", num_cpus :: get ());
Sortieren Sie Vektor (i32)
Sie können einen Vektor sortieren wie:
fn main ()
Sei Mut vec = vec![1,23,42,23,45,223,211,122,233,799,123];
vec.Sortieren();
println!("Sortiert: :? ", vec)
Sortieren Sie den Vektor (F64)
Sie können auch einen Vektor von Gleitkommawerten sortieren wie:
fn main ()
Sei Mut vec = vec![23.12, 3.44, 5.55, 34.90, 2.0];
vec.sort_by (| x, y | x.partial_cmp (y).auspacken());
println!("Sortiert: :? ", vec);
Meldung an die Konsole protokollieren
Sie können das Protokoll -Erstellen verwenden, um Protokollnachrichten zu erstellen. Ein einfaches Beispiel ist wie unten gezeigt:
fn log (Befehl: & str)
Protokoll :: Debug!("Befehl rennen: ", Befehl);
fn main ()
env_logger :: init ();
log ("ps aux | grep bash");
// mit dem Befehl ausführen:
// Rust_log = Debugg Frachtlauf
Codieren base64
Der folgende Code zeigt ein Programm, mit dem eine Zeichenfolge nach Base64 codiert werden kann.
Verwenden Sie Base64 :: Enkodus;
Verwenden Sie STD :: ERROR :: ERROR;
fn main () -> Ergebnis<(), Box>
Sei String = B "Willkommen bei LinuxHint";
let coded = codode (String);
println!("Base64: ", codiert);
OK(())
Dekodieren base64
Wir können die Base64 -String als:
Verwenden Sie Base64 :: Decodieren;
Verwenden Sie std :: str;
Verwenden Sie STD :: ERROR :: ERROR;
fn main () -> Ergebnis<(), Box>
Sei B64 = "V2VSY29TZSB0BYBMAW51EGHPBNQ =";
lass decoded = & decodieren (B64).ausprap () […];
println!("String: :? ", str :: from_utf8 (decodiert));
OK(())
Konvertieren Sie die lokale Zeit in eine andere Zeitzone
Das folgende Programm wandelt die lokale Zeit in die bestimmte Zeitzone um. Der Code ist wie unten gezeigt:
Verwenden Sie Chrono :: Prelude ::*;
fn main ()
local_time = local :: jetzt ();
lass utc = datetime :::: von_utc (local_time.naive_utc (), utc);
Sei EST = FixOffset :: East (5 * 3600);
println!("Lokale Zeit: eat", local_time);
println!("UTC -Zeit jetzt: ", UTC);
println!("Est Zeit jetzt: ", UTC.with_timezone (& est));
// Beispielausgabe
// Ortszeit: 2022-02-27 14:50:31.014429200 +03: 00 Essen
// UTC-Zeit jetzt: 2022-02-27 11:50:31.014429200 UTC
// est jetzt: 2022-02-27 16:50:31.014429200 +05: 00
Abstand zwischen zwei Punkten auf der Erde
Wir können den Abstand zwischen zwei Punkten auf der Erde basierend auf Länge und Breitengrad berechnen, wie im folgenden Beispiel gezeigt:
const Earth_radis: f64 = 6378.1370;
fn main ()
Lassen Sie nairobi_lat_deg = -1.286389_f64;
Lassen Sie Nairobi_long_deg = 36.817223_f64;
lass el_paso_lat_deg = 31.772543_f64;
lass el_paso_long_deg = -106.460953_f64;
lass nairobi_lat = nairobi_lat_deg.to_Radians ();
lass el_paso_lat = el_paso_lat_deg.to_Radians ();
leta_lat = (nairobi_lat_deg - el_paso_lat_deg).to_Radians ();
leta_long = (nairobi_long_deg - el_paso_long_deg).to_Radians ();
lass angle_inner = (Delta_lat / 2.0).Sünde().Powi (2) +
nairobi_lat.cos () * el_paso_lat.cos () * (Delta_long / 2.0).Sünde().Powi (2);
lass Central_angle = 2.0 * angle_inner.SQRT ().wie in();
let distance = earth_radis * Central_angle;
println!("Abstand zwischen Nairobi und El Paso ist: :.2 km ", Abstand);
URL -Schema extrahieren
Wir können den Host und das Schema aus einer bereitgestellten URL -Zeichenfolge extrahieren wie:
Verwenden Sie URL :: URL, Host, Parseerror;
fn main () -> Ergebnis<(), ParseError>
Sei String = "https: // linuxhint.com ";
Sei URL = URL :: Parse (String)?;
Sei Schema = URL.planen();
lass Host = URL.Gastgeber();
println!("Schema: ", Schema);
println!("Gastgeber: :?", Gastgeber);
OK(())