Topp 10 rustprogrammeringskodeeksempler

Topp 10 rustprogrammeringskodeeksempler
Programmering handler om problemløsing. Det er ingen måte du kan bli en dyktig programmerer uten å øve og bygge ting på. I denne artikkelen vil vi lage prosjekter for å komme i gang på rustprogrammeringsspråket.

Få største streng

Det første programmet prøver å bestemme den største strengen fra to strengpar. Eksemplet kildekode er som vist nedenfor:

fn største<'a>(str1: & 'a str, str2: &' a str) -> & 'a str
Hvis str1.len ()> str2.len ()
STR1
annet
str2


fn main ()
La str1 = "hei";
La str2 = "Linuxhint";
La resultat = største (str1, str2);
Println!("Største: ", resultat);

Komprimere katalog til tarball

Det andre programmet komprimerer den medfølgende katalogen til en tarball. Kildekodeeksemplet er som vist:

MERK: Denne koden krever FLATE2 komprimerings-/dekompresjonsbibliotek.

Bruk std :: fs :: fil;
Bruk flate2 :: komprimering;
Bruk flate2 :: skriv :: gzencoder;
fn main () -> resultat<(), std::io::Error>
La GZ = Fil :: Opprett ("Arkiv.tjære.gz ");
La Encoder = gzencoder :: new (gz, komprimering :: standard ());
La Mut Tar = Tar :: Builder :: New (Enc);
// Legg til alle filer i gjeldende katalog til Current_Backup
tjære.append_dir_all ("."," Current_backup ")?;
OK (());

Dekompress Tarball

Neste er et program for å dekomprimere en tarball. Kildekoden er som vist nedenfor:

Bruk std :: fs :: fil;
Bruk std :: sti :: pathbuf;
Bruk Flate2 :: Les :: Gzencoder;
Bruk Tar :: Arkiv;
Bruk std :: Feil :: Feil;
fn main () -> resultat<(), Box>
La fil = Fil :: Åpne ("Path/To/Archive.tjære.gz ")?;
La Mut Archive = Archive :: New (Gzencoder :: new (fil));
Println!("Utvunnet: ");
arkiv
.innganger()?
.filter_map (| e | e.OK ())
.Kart (| Mut -oppføring | -> Resultat>
La banen = inngang.sti()?.to_Owned ();
OK (sti.to_path_buf ())
)
.filter_map (| e | e.OK ())
.for_each (| x | println!("> ", x.vise()));
OK (())

Finn alle TXT -filer i en katalog

Det neste programmet vi kan bygge er et som finner alle TXT -filer i en katalog: Koden er som angitt nedenfor:

Bruk glob :: glob;
Bruk std :: Feil :: Feil;
fn main () -> resultat<(), Box>
for vare i glob ("**/*.tekst")?
Println!("", vare?.vise());

OK (())

Generere tilfeldige tall

Et enkelt program for å generere tilfeldige tall.

Bruk Rand :: RNG;
fn main ()
La Mut Range = rand :: thread_rng ();
La num: i32 = rekkevidde.Gen ();
Println!("Tilfeldig: ", n1);

Passordgenerator

Vi kan opprette en passordgenerator ved å generere tilfeldige alfanumeriske tegn. Kode er som vist:

Bruk Rand :: RNG;
const charset: & [u8] = b "abcdefghijklmnopqrstuvwxyz \

abcdefghijklmnopqrstuvwxyz \

0123456789) (*&^%$#@!";
const len: i32 = 25;
fn main ()
La mut rng = rand :: thread_rng ();
La passord: streng = (0 ... len)
.Kart (| _ |
La IDX = RNG.Gen_range (0 ... Charset.len ());
Charset [IDX] som røye
)
.samle inn();
Println!("Passord: ", passord);

Les CSV

Neste program er å lese en CSV -fil. Koden er en vist:

Bruk CSV :: Feil;
fn main () -> resultat<(), Error>
La csv_data = "
101, Edith, Masao, [email protected], Colombia, Doctor
102, Kellen, Yusuk, [email protected], Nicaragua, politibetjent
";
La Mut Reader = CSV :: Leser :: From_Reader (CSV_DATA.as_bytes ());
for rad i leseren.poster ()
La rad = rad?;
Println!(
"Id | FirstName: | lastName: | e -post: | land: | yrke: |",
& rad [0],
& rad [1],
& rad [2],
& rad [3],
& rad [4],
& rad [5],
);

OK (())

Antall CPU -kjerner

Få antall logiske CPU -kjerner i programmet:

fn main ()
Println!("CPU -kjerner: ", num_cpus :: get ());

Sorter vektor (i32)

Du kan sortere en vektor som:

fn main ()
La mut vec = vec![1,23,42,23,45,223,211,122,233,799,123];
Vec.sortere();
Println!("Sortert: :? ", VEC)

Sorter vektor (F64)

Du kan også sortere en vektor med flytende punktverdier som:

fn main ()
La mut vec = vec![23.12, 3.44, 5.55, 34.90, 2.0];
Vec.sort_by (| x, y | x.partial_cmp (y).Unwrap ());
Println!("Sortert: :? ", vec);

Loggmelding til konsoll

Du kan bruke loggen Opprett til å lage loggmeldinger. Et enkelt eksempel er som vist nedenfor:

fn log (kommando: & str)
Logg :: Debug!("Kjør kommando: ", kommando);

fn main ()
env_logger :: init ();
logg ("PS aux | grep bash");
// Kjør med kommando:
// rust_log = feilsøking

Kode base64

Koden nedenfor viser et program for å kode en streng til base64.

Bruk base64 :: kode;
Bruk std :: Feil :: Feil;
fn main () -> resultat<(), Box>
La streng = B "Velkommen til Linuxhint";
La kodet = kode (streng);
Println!("Base64: ", kodet);
OK (())

DECODE BASE64

Vi kan avkode base64 -streng som:

Bruk base64 :: avkode;
Bruk std :: str;
Bruk std :: Feil :: Feil;
fn main () -> resultat<(), Box>
La B64 = "V2VSY29TZSB0BYBMAW51EGHPBNQ =";
La dekodet = & avkode (B64).Unwrap () […];
Println!("String: :? ", str :: fra_utf8 (dekodet));
OK (())

Konverter lokal tid til en annen tidssone

Programmet nedenfor konverterer lokal tid til spesifisert tidssone. Kode er som vist nedenfor:

Bruk Chrono :: Prelude ::*;
fn main ()
la local_time = local :: nå ();
La UTC = DateTime :::: fra_utc (local_time.naive_utc (), UTC);
Let EST = FixedOffset :: East (5 * 3600);
Println!("Lokal tid: spis", local_time);
Println!("UTC tid nå: ", UTC);
Println!("EST tid nå: ", UTC.med_timeZone (& est));
// Eksempelutgang
// Lokal tid: 2022-02-27 14:50:31.014429200 +03: 00 spise
// UTC Tid nå: 2022-02-27 11:50:31.014429200 UTC
// EST TID NÅ: 2022-02-27 16:50:31.014429200 +05: 00

Avstand mellom to punkter på jorden

Vi kan beregne avstanden mellom to punkter på jorden basert på lengdegrad og breddegrad som vist i eksemplet nedenfor:

const Earth_radis: F64 = 6378.1370;
fn main ()
La nairobi_lat_deg = -1.286389_f64;
La nairobi_long_deg = 36.817223_F64;
La el_paso_lat_deg = 31.772543_F64;
La el_paso_long_deg = -106.460953_F64;
La nairobi_lat = nairobi_lat_deg.to_radians ();
la el_paso_lat = el_paso_lat_deg.to_radians ();
La Delta_Lat = (Nairobi_Lat_deg - El_Paso_Lat_deg).to_radians ();
La Delta_Long = (Nairobi_Long_deg - El_Paso_Long_deg).to_radians ();
la vinkel_inner = (Delta_Lat / 2.0).synd().POWI (2) +
Nairobi_lat.cos () * el_paso_lat.cos () * (Delta_long / 2.0).synd().Powi (2);
La Central_angle = 2.0 * Angle_inner.SQRT ().som i();
La avstand = Earth_radis * Central_angle;
Println!("Avstand mellom Nairobi og El Paso er: :.2 km ", avstand);

ETTER URL -skjemaet

Vi kan trekke ut verten og ordningen fra en medfølgende URL -streng som:

Bruk URL :: URL, Host, ParseError;
fn main () -> resultat<(), ParseError>
La streng = "https: // linuxhint.com ";
La url = url :: parse (streng)?;
La ordning = url.ordning ();
La verten = url.vert();
Println!("Scheme: ", skjema);
Println!("Vert: :? ", vert);
OK (())