4. Strings and String Slices
String vs. &String vs. &str vs. str
String constants
Converting between strings and slices
Taking a slice of a string
Byte slices
Conversion to strings
Unsafe but fast
Function arguments: prefer &str over &String
String vs. &str and byte sizes
fn main ( ) {
let s : String = "abc" . to_string ( ) ;
let t : & str = "xyz" ;
println ! ( "{} {} {} {}" ,
s, std:: mem:: size_of:: <String >( ) ,
t, std:: mem:: size_of:: <& str >( ) ) ;
println ! ( "{}" , std:: mem:: size_of:: <& mut String >( ) ) ;
}
Converting between String and &str
fn main ( ) {
let s : String = "abc" . to_string ( ) ;
let t = & s[ 1 ..2 ] ;
println ! ( "{} {} {} {}" ,
s, std:: mem:: size_of:: <String >( ) ,
t, std:: mem:: size_of:: <& str >( ) ) ;
}
fn main ( ) {
let s : String = "abc" . to_string ( ) ;
let t = & s[ 1 ..2 ] ;
let b = std:: str:: from_utf8 ( b"pqr" ) . unwrap ( ) ;
println ! ( "{} {} {} {} {}" ,
s, std:: mem:: size_of:: <String >( ) ,
t, std:: mem:: size_of:: <& str >( ) , b) ;
}
fn main ( ) {
let s : String = "abc" . to_string ( ) ;
let t = & s[ 1 ..2 ] ;
let b = unsafe {
std:: str:: from_utf8_unchecked ( b"pqr" )
} ;
println ! ( "{} {} {} {} {}" ,
s, std:: mem:: size_of:: <String >( ) ,
t, std:: mem:: size_of:: <& str >( ) , b) ;
}
fn f ( s : & str ) {
println ! ( "In f: {}" , s) ;
}
fn main ( ) {
let s : String = "abc" . to_string ( ) ;
f ( & s) ;
let t = & s[ 1 ..2 ] ;
f ( t) ;
println ! ( "{} {} {} {}" ,
s, std:: mem:: size_of:: <String >( ) ,
t, std:: mem:: size_of:: <& str >( ) ) ;
}