Rustのchars()で文字と文字位置を取得する

chars()で文字列を分割したイテレータが返ってくるようなのでenumerate()でインデックス情報を追加します。

fn main() {
    let str = "abc";
    for (i, c) in str.chars().enumerate() {
        println!("{:?} : {:?}", i, c)
    }
}

出力

0 : 'a'
1 : 'b'
2 : 'c'

インデックスを1から始まりにする

zip()の2つのイテレータをまとめる性質を利用して0以外の値からスタートさせることもできます。

fn main() {
    let str = "abc";
    for (i, c) in (1..).zip(str.chars()) {
        println!("{:?} : {:?}", i, c)
    }
}

出力

1 : 'a'
2 : 'b'
3 : 'c'

参照