オセロの一手指しのような問題を解く前の下準備です
1) 文字列の連結
2) 指定位置文字の入れ替え
3) 文字列から指定1文字のカウント
4) 指定位置文字の比較
5) 変数の型表示
こんなことを検証してみました
ソースリスト
fn print_type(_: T) {
println!("{}", std::any::type_name::());
}
fn main() {
let str1 = "1234";
let str2 = "####";
let str3 = str1.to_owned() + str2; //文字列連結
println!("{}", str3);
let go = "5";
let pos = 4;
let str4 = str3[..pos].to_owned() + go + &str3[pos+1..]; //一文字入れ替え
println!("{} {}", str4, go);
println!("\n** sharp_count **");
let a_iter = str4.chars().map(|c| c=='#');//#をカウント(失敗)
for i in a_iter{
println!("{}", i);
}
let sharp_count = str4.chars().filter(|&c| c == '#').count();//#をカウント
println!("{} {}", str4, sharp_count);
println!("\n** compare_&str **");
if &str4[pos..pos+1] == go{
println!("** go 1 **")
}
if str4[pos..pos+1] == *go{
println!("** go 2 **")
}
println!("\n** type_name **");
print_type(str1);
print_type(str1.to_owned());
print_type(str3);
//print_typename(str4[pos..pos+1]); error
print_type(&str4[pos..pos+1]);
print_type(str4);
//print_type(str4); //2度は呼べない use of moved value: `str4`
print_type(go);
print_type(pos);
print_type(pos); //こちらは呼べるー
}