いつもお世話になっております。
例えば文字列がchar型で”あいうABC123”があるとします。
これを、”あいうABC123”としたいのですがどうすれば良いか
わかりません。
LCMapStringを実行するとABCまで半角に変換されてしまいます。
数字のみを半角にする方法はないのでしょうか?
よろしくお願いいたします。
開発環境:Win2000、VS6SP5、MFCではありません。
一文字ずつ取り出し、全角数字のみ変換すればよいのでは。
わたしがいつも使っている物ですが、参考になるかな?
※ S-JIS用です。
#define is2byte_(c) ((0x81 <= ((unsigned char)c) && ((unsigned char)c) <= 0x9f)
|| (0xe0 <= ((unsigned char)c) && ((unsigned char)c) <= 0xfc))
void WideToNarrow_Num(std::string& str)
{
if (str == ") return;
for (unsigned int i = 0; i < str.length()-1; i++)
{
if ((unsigned char)str.at(i) == 0x82)
{
if ((unsigned char)str.at(i+1) >= 0x4F && (unsigned char)str.at(i+1) <=
0x58)
{
str[i+1] = (unsigned char)str.at(i+1) - 0x1F;
str.erase(i, 1);
}
else ++i;
}
else if (is2byte_(str.at(i))) ++i;
}
}
CString用ではないので、CString用に書き直してみたら使えるかもしれません。
基本的に提供されているAPIや標準関数で出来ないのであれば、
自分で地道にやるしかないです。
今でこそ標準関数もAPIもそろっているのでなんでもかんでも
自作関数と言う自体が緩和されていますけれど、
基本的に汎用の関数なのでかゆい所に手が届く物ではないと
考えるべきでしょう。
こういう処理を組み立てる作業って言うのは、
結構基本的なロジックの勉強になります。
なので必要な状況になったらどしどし挑戦すると
自分の力になってよいと思います。
組んでみて解らなければ、また聞きにくればよいのですし。
返信ありがとうございます。
お返事送れてすみません。
一文字づつ検索し変換することにしました。
ありがとうございました。