質問: 文字列の最後の一字を削除 string str; str=”abc壁xデスクトップyyy”;//一例 strから最後の一字を取り除くときに 最初から順番に各文字が2バイト文字か1バイト文字かを調べていき最後のバイトが2バイト文字の第2バイトと判明したときに最後の2バイトを除去し最後のバイトが1バイト文字と判明したときにstrの最後の1バイトを除去する ことによってできますがstrが膨大だと時間がかかります 文字列作成時に各文字が2バイト文字なのか1バイト文字なのかをメモっておくのも管理が大変ですし もっと早く最後の文字が1バイト文字なのか2バイト文字なのかを判定する方法は有りませんか?
回答: 後ろから見ていって「シフトjisでない(シフトjisの1文字目でも2文字目でもない)」バイトを探して、 そこから始めるようにすればいくらか速くなるでしょう。 (シフトjisに含まれない文字にはコントロールコード、特殊記号、数字などがあります。) シフトjis判断関数は、昔のbccにはあったのですが、 今の処理系ではどうなっているかわかりません。 無いようならマクロかなんかで作ってください。