>103

> for i := 1 to 27 do begin
> ShowMessage(s+ ' '+dakuten[i]+' '+dakuon[i]);
> Result := ReplaceCharInString(s,dakuten[i],dakuon[i]); // これが間違い
> end;

『sの中のカ゛をガに置換して,その置換した文字列の中のキ゛をギに置換して…』

とやらなければならないところを

『sの中のカ゛をガに置換して,(その置換した文字列を放置して)sの中のキ゛をギに置換して…』

となってしまっています.
結果としてsの中のウ゛をヴに置換したものが戻り値になってしまうわけです.



ところでブレークポイントやステップ実行などのデバッグ機能はお使いですか?
こういうミスも見つけやすくなりますよん.
デバッグ用にメモコンポーネントに書き出したりShowMessageを使うのは
上の方法が使えないときだけでよいと思います.