【Rust】コンソールにて文字列を入力し、結果をprintにて出力させる方法

Rustプロジェクトにおいて、コンソールにて何かしら入力した文字列をそのまま出力する方法を説明します。

 

※元々はC++を勉強していて、そこからRustに以降しました。よって、C++のコードも合わせて記載し、その違いを把握しながらRustでのコードの書き方を少しずつアウトプットして行きたいと思います。

 

1: C++での書き方

2: Rustでの書き方

3: 入力処理の関数化

 

 


C++での書き方】

C++では入力の読み込みに cin を用いています。

#include <iostream>

using namespace std;

int main() {
    string answer;
    cout << "何か文字を入力して下さい:\n";
    cin >> answer;

    cout << answer << endl;

    return 0;
}

 

こんな感じでしょうか。実行すると、「 何か文字を入力して下さい: 」で改行され、そこから入力を受け付けます。適当な文字列を入力しエンターキーを押すと、入力した文字列がそのまま次の行で出力されるでしょう。

何か文字を入力して下さい:
hogehoge
hogehoge

 

 


【Rustでの書き方】

ではRustで同じ処理を行なえる様に書いてみます。

fn main() {
    println!("何か文字を入力して下さい:");

    let mut word = String::new();
    std::io::stdin().read_line(&mut word).ok();
    let answer = word.trim().to_string();

    println!("{}", answer);
}

 

1つ1つ説明します。

 

let mut word = String::new();

入力した文字列を受け取るString変数を用意します。空文字として定義しても mut (ミュータブル)なので文字列の変更や追加が可能です。よって、

let mut word = "".to_string();

でもOKです。

 

std::io::stdin().read_line(&mut word).ok();

ここが入力を受け付けるコードです。先頭の std:: は予め use で定義しておく事で省略も可能となります(後ほど例を書きます)。これにより、入力した文字列は word 変数に格納されます。

 

let answer = word.trim().to_string();

出力用のString変数です。これはただ最後に出力するだけに使われるので、 mut は不要です。入力した文字列が格納されている word 変数を、String型に置き換えて answer 変数に代入します。

実行すると、C++の例と同じ様な結果になります。 

何か文字を入力して下さい:
hogehoge
hogehoge

 

 


【入力処理の関数化】

一応完成はしていますが、関数化して使い回し出来る様にしましょう。

 

use std::io;

fn main() {
    println!("何か文字を入力して下さい:");

    let answer = get_input();

    println!("{}", answer);
}

fn get_input() -> String {
    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();
    return word.trim().to_string();
}

get_input 関数を新たに作成しました。

 

return word.trim().to_string();

関数内で word 変数を定義し、入力した値を return で返す方法がこちらになります。数値等はまた書き方が異なりますが、文字列についてはこの書き方で良いでしょう。

 

use std::io;

また、コードの先頭にて事前にこれを定義しておく事で、コード内で必要とされる std:: が省略可能となります。

実行すると同じ結果が得られるでしょう。

 

関数化する事で、複数の入力を受け付けたい時もコードが煩雑にならずに済みます。

 

use std::io;

fn main() {
    println!("何か文字を入力して下さい:");
    let answer01 = get_input();

    println!("繋げたい文字を入力して下さい:");
    let answer02 = get_input();

    println!("{}{}", answer01, answer02);
}

fn get_input() -> String {
    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();
    return word.trim().to_string();
}

こんな感じで、2つの入力文字列を1つに繋げて出力したい場合等に便利です。出力結果は下記となります。

何か文字を入力して下さい:
magidro
繋げたい文字列を入力して下さい:
pack
magidropack

 

プログラミングのスキルチェック等での課題でお役に立てれば幸いです。

 

以上です。