CStringのTrimLeftについて – プログラミング – Home

通知
すべてクリア

[解決済] CStringのTrimLeftについて


Eriko
 Eriko
(@Eriko)
ゲスト
結合: 18年前
投稿: 25
Topic starter  

お世話になります
環境はWinXP Pro VC++6.0 です

MFCウイザードでダイアログベースのデフォルトのスケルトンをつくり

OKボタンに下記ソースを実装しました

void CTestDlg::OnOK()
{

CString ss;
ss = ab北海道;
AfxMessageBox(ss); //1
ss.TrimLeft(ab);
AfxMessageBox(ss); //2
ss = 青北海道;
AfxMessageBox(ss); //3
ss.TrimLeft(青);
AfxMessageBox(ss); //4

CDialog::OnOK();
}

上記4箇所の表示では それぞれ

ab北海道
北海道
青北海道
青北海道

でした //4のところでは

    北海道

と表示されるとおもったのですが 青北海道 でした

青北海道

をTrimLeftして 北海道 としたいときには どうすればよろしいのでしょうか

過去とのしがらみでいまだに VC++6.0 使っていますが

よろしくおねがいします


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

TrimLeftをみてみたところ、内部では_tcschrを呼び出しているようでした。
マルチバイト文字セットを使う場合は_mbschrに置き換わるのですが、
そこで、_mbschrの第二引数に指定する文字列が、マルチバイト文字であろうが最初の1
バイトしか見ていないのが問題ではないかと思います。

STREX.cpp CString::TrimLeftのところ
>if (_tcschr(lpszTargets, *lpsz) == NULL)
が原因。

ということで、現状のソースコードのままでは対処不能でしょう。
文字セットをマルチバイト文字セットを使う→Unicode文字セットを使うに変え、
すべてをTCHAR対応に書き換えるのが一番の対処法でしょうが、影響が大きすぎるかなと。

やはり、CString::TrimLeft代替関数を自作するのが一番そう。

参考
全角スペースを削除
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200207/02070117.txt


返信引用
Eriko
 Eriko
(@Eriko)
ゲスト
結合: 18年前
投稿: 25
Topic starter  

Blueさん ありがとうございました

参考に示されたページの例にならって自作の関数を作ってうまくいきました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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