文字列中の全角の数字を半角にしたい – プログラミング – Home

文字列中の全角の数字を半角にしたい
 
通知
すべてクリア

[解決済] 文字列中の全角の数字を半角にしたい


あお
 あお
(@あお)
ゲスト
結合: 22年前
投稿: 45
Topic starter  

いつもお世話になっております。

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

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


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

一文字ずつ取り出し、全角数字のみ変換すればよいのでは。


返信引用
Oksana
 Oksana
(@Oksana)
ゲスト
結合: 21年前
投稿: 2
 

わたしがいつも使っている物ですが、参考になるかな?
※ 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
 Oksana
(@Oksana)
ゲスト
結合: 21年前
投稿: 2
 

CString用ではないので、CString用に書き直してみたら使えるかもしれません。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

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

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


返信引用
あお
 あお
(@あお)
ゲスト
結合: 22年前
投稿: 45
Topic starter  

返信ありがとうございます。
お返事送れてすみません。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました