文字列中の全角の数字を半角にしたい

[戻る]
あお 2004/07/16(金) 18:37:10
いつもお世話になっております。

例えば文字列がchar型で”あいうABC123”があるとします。
これを、”あいうABC123”としたいのですがどうすれば良いか
わかりません。
LCMapStringを実行するとABCまで半角に変換されてしまいます。
数字のみを半角にする方法はないのでしょうか?
よろしくお願いいたします。

開発環境:Win2000、VS6SP5、MFCではありません。

dairygoods 2004/07/16(金) 20:14:10
一文字ずつ取り出し、全角数字のみ変換すればよいのでは。

Oksana 2004/07/25(日) 22:42:55
わたしがいつも使っている物ですが、参考になるかな?
※ 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;
  }
}

Oksana 2004/07/25(日) 22:44:23
CString用ではないので、CString用に書き直してみたら使えるかもしれません。

PATIO 2004/07/26(月) 15:15:17
基本的に提供されているAPIや標準関数で出来ないのであれば、
自分で地道にやるしかないです。
今でこそ標準関数もAPIもそろっているのでなんでもかんでも
自作関数と言う自体が緩和されていますけれど、
基本的に汎用の関数なのでかゆい所に手が届く物ではないと
考えるべきでしょう。

こういう処理を組み立てる作業って言うのは、
結構基本的なロジックの勉強になります。
なので必要な状況になったらどしどし挑戦すると
自分の力になってよいと思います。
組んでみて解らなければ、また聞きにくればよいのですし。

あお 2004/07/27(火) 16:16:05
[[解決]]
返信ありがとうございます。
お返事送れてすみません。

一文字づつ検索し変換することにしました。

ありがとうございました。

古いスレッドには追加発言できません。