bstr クレートのおかげで String
でできることは Vec<u8>
でもできるようになっている。
(ASCII 文字しか出てこない競プロの範囲においては)
String, str について
String の概要
- UTF-8 の意味で有効な文字列のみを格納した
Vec<u8>
のラッパー
- 可変長エンコードに対応している
- UTF-8 は1文字が1バイト~4バイトで変化する
- インデックスアクセスを提供していない
Vec<u8>
のある1バイトだけを取り出しても意味がないため
- 競プロでは ASCII 文字しか出てこないので、ある1バイトを取り出したい事が多い。しかし String ではできないので、代わりに Vec<u8> などを使うことになる。
- スライスによるアクセスは対応しているが、UTF-8の文字境界かどうかをチェックしている
- 1バイトだけ取り出すのは意味ないが、複数バイト取り出す場合は(文字境界が正しければ)意味がある
- find 関数は添字を返すが、その添字はスライスを作るときの境界値として使うことを想定している。
str のメソッド
- starts_with, ends_with
- contains
- find
- repeat
- replace
- matches
- to_lowercase, to_uppercase
- split
- trim