Nota: ¡esta pregunta contiene un código anterior a 1.0 obsoleto! Sin embargo, la respuesta es correcta.
Para convertir a str
a int
en Rust, puedo hacer esto:
let my_int = from_str::<int>(my_str);
La única forma en que sé cómo convertir un String
a int
es obtener una porción de él y luego usarlo from_str
así:
let my_int = from_str::<int>(my_string.as_slice());
¿Hay alguna manera de convertir directamente a String
a int
?
use std::str::FromStr;
arregla eso. Más sobre from_str si lo desea. doc.rust-lang.org/std/str/trait.FromStr.html#tymethod.from_strRespuestas:
Usted puede convertir directamente a un int utilizando el
str::parse::<T>()
método .Puede especificar el tipo de análisis con el operador turbofish (
::<>
) como se muestra arriba o mediante una anotación explícita de tipo:Como se menciona en los comentarios,
parse()
devuelve aResult
. Este resultado será unErr
si la cadena no se puede analizar como el tipo especificado (por ejemplo, la cadena"peter"
no se puede analizar comoi32
).fuente
parse
devuelve aResult
, por lo que debe lidiar con eso adecuadamente para llegar a un tipo integral real.str::parse::<u32>
devuelve unaResult<u32, core::num::ParseIntError>
yResult::unwrap
"desenvuelve resultado, produciendo el contenido de unOk
pánicos [OR] si el valor es unaErr
, con un mensaje de pánico proporcionada por elErr
valor 's".str::parse
es una función genérica , de ahí el tipo entre paréntesis angulares.fuente
let my_u8: u8
), entonces no necesita el valor entre paréntesis angulares. También tenga en cuenta que el estilo de Rust predominante indica que:
debe mantenerse en el lado izquierdo.let my_u32: u32 = "42".parse().unwrap()
Si obtiene su cadena
stdin().read_line
, primero debe recortarla.fuente
Con una noche reciente, puedes hacer esto:
Lo que sucede aquí es que
String
ahora se puede desreferenciar en astr
. Sin embargo, la función quiere un&str
, así que tenemos que pedir prestado nuevamente. Como referencia, creo que este patrón particular (&*
) se llama "préstamo cruzado".fuente
String
en un punto y esperaba que funcionara.my_sttring.as_slice()
comomy_string[]
(actualmenteslicing_syntax
está controlado por funciones, pero lo más probable es que alguna forma termine en el idioma).Puede usar el método
FromStr
del rasgofrom_str
, que se implementa parai32
:fuente
Bueno no. ¿Por qué debería haber? Simplemente descarte la cadena si ya no la necesita.
&str
es más útil queString
cuando solo necesita leer una cadena, porque es solo una vista del dato original, no su propietario. Puede pasarlo más fácilmente queString
, y es copiable, por lo que no es consumido por los métodos invocados. En este sentido, es más general: si tiene unString
, puede pasarlo a donde&str
se espera un, pero si lo tiene&str
, solo puede pasarlo a las funciones que esperanString
si realiza una nueva asignación.Puede encontrar más información sobre las diferencias entre estos dos y cuándo usarlos en la guía oficial de cadenas .
fuente
.as_slice()
cada vez que necesito hacerlofrom_str
en una cadena. Argumentos de línea de comandos, por ejemplo, es un lugar donde tengo que hacerfrom_str
en todos los argumentos a interpretarlos comoint
s etcas_slice()
es solo un aspecto menor del manejo de cadenas. Por ejemplo, puede usar la sintaxis de corte (s[]
) o explotar laDeref
coerción (&*s
). Incluso hay una propuesta que permitiría escribir solo&s
.&s
para una cadena? ¿Daría unastr
vuelta? ¿Podrías señalarme la propuesta?str
no es con lo que está trabajando; es&str
. Son diferentes (pero relacionados). El primero es un tipo de tamaño dinámico que casi nunca usarías directamente, mientras que el segundo es un segmento de cadena que es un puntero grueso. La propuesta se llama coerciones deref ; permitiría coaccionar de&T
a&U
siT: Deref<U>
. DesdeString: Deref<str>
ya, usted será capaz de obtener&str
a partirString
con sólo&
. Todavía está en discusión, pero dudo que suceda antes de 1.0, queda muy poco tiempo.¡Así que básicamente quieres convertir una cadena en un entero bien! esto es lo que uso principalmente y eso también se menciona en la documentación oficial.
Esto funciona tanto para String como para & str Espero que esto también ayude.
fuente