文字列変換
CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 71/75。
数値型を文字列に変換するには、to_string() メソッドを使用できます。このメソッドは、整数や浮動小数点数を含むほとんどのデータ型で使用できます。
例えば:
let number = 42;
let number_str = number.to_string();
println!("The number as a string: {}", number_str);この例では、i32型の変数numberをStringに変換しています。
文字列を数値型に変換するには、parse()メソッドを使用できます。このメソッドは、変換された数値、または変換に失敗した場合はエラーのいずれかを含む結果を返します。
例えば:
let number_str = "123";
let number: i32 = number_str.parse().unwrap();
println!("The number as an i32: {}", number);この例では、parse() メソッドを使用して文字列 number_str を i32 に変換しています。unwrap() メソッドは、変換が成功したと仮定して Result から値を取り出すために使用されます。
変換に失敗した場合、プログラムはパニック(失敗)します。
また、parse() を異なる数値型で使用することもできます:
let float_str = "3.14";
let float_num: f64 = float_str.parse().unwrap();
println!("The number as an f64: {}", float_num);この場合、文字列 float_str を f64 に変換しています。
チャレンジ
簡単3つの引数を受け取る convert_and_print という名前の関数を作成してください:
- 文字列スライス
s: &str— これはテキストとして書かれた数値です(例:"123.67")。これはto_stringがfalseの場合にのみ使用されます。 - 浮動小数点数
n: f64— 浮動小数点数です。これはto_stringがtrueの場合にのみ使用されます。 - ブーリアン
to_string: bool— どの操作を実行するかを決定します。
この関数は以下の操作を実行する必要があります:
- もし
to_stringがtrueの場合:.to_string()を使用してnを文字列に変換し、そこに含まれる数字の文字数をカウントします(ドット.やマイナス記号-はカウントしないでください)。次の形式で出力します:Number: [string], Digits: [num of digits]
例えば、n = -321.198623の場合、その文字列形式は"-321.198623"となり、9つの数字文字が含まれます(-と.は含みません)。
ヒント:nを文字列に変換し、それに対して.len()を使用して、含まれる.または-ごとに1を引きます。 - もし
to_stringがfalseの場合:.parse()を使用して文字列sをf64としてパースし、それをi32にキャストします(これにより小数点以下が切り捨てられます)。次の形式で出力します:String as number: [number]
例えば、s = "123.67231"の場合、出力はString as number: 123となります。
convert_and_print を2回呼び出してください:
- 1回目は
to_stringをfalseに設定して呼び出します。これは文字列sを使用し、nを無視します。 - 2回目は
to_stringをtrueに設定して呼び出します。これは数値nを使用し、sを無視します。
チートシート
数値型を文字列に変換するには、to_string()メソッドを使用します:
let number = 42;
let number_str = number.to_string();文字列を数値型に変換するには、parse()メソッドを使用します:
let number_str = "123";
let number: i32 = number_str.parse().unwrap();parse()メソッドは、さまざまな数値型で使用できます:
let float_str = "3.14";
let float_num: f64 = float_str.parse().unwrap();unwrap()メソッドは、Resultから値を取り出します。変換に失敗した場合、プログラムはパニックを起こします。
自分で試してみよう
use std::io;
fn convert_and_print(s: &str, n: f64, to_string: bool) {
// ここにコードを記述してください
}
fn main() {
let mut input_number_str = String::new();
let mut input_n = String::new();
io::stdin().read_line(&mut input_number_str).unwrap();
io::stdin().read_line(&mut input_n).unwrap();
let n: f64 = input_n.trim().parse().unwrap();
let number_str = input_number_str.trim();
// to_string = false で convert_and_print を呼び出す
// to_string = true で convert_and_print を呼び出す
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。