ひらがなを含む文字列操作 – プログラミング – Home

ひらがなを含む文字列操作
 
通知
すべてクリア

[解決済] ひらがなを含む文字列操作


tete2000
 tete2000
(@tete2000)
ゲスト
結合: 16年前
投稿: 8
Topic starter  

環境:Visual C++6.0 WindowsXP

ひらがなを含む文字列操作で嵌っています。
文字列からファイル名を除く処理

<具体例>
c:\tete\ひらがなフォルダ\aaaa.txt から
c:\tete\ひらがなフォルダを取り出したい。

を行いたいのでが、下記関数ではうまくいきません。
理由は文字列処理をchar型でやっているためだとわかっているのですが、ひらがなを含
む場合にはどのようにやればよろしいのでしょうか? 下記関数でひらがなを含まない
場合には正しく動作することを確認済みです。

WCHARにすればうまくいくのか??
いろいろ悩みましたが良案が浮かばないためアドバイスお願いします。

コードは

main関数で{
CString fname = c:\tete\ひらがなフォルダ\aaaa.txt;
CString m_CurentDir = GetCurrentDir(fname);
}

CString CRAW_CalDlg::GetCurrentDir(CString fname)
{
LPTSTR p = fname.GetBuffer(256);

int len = strlen(p);
int i,j;
char tete_fname[256];
CString Cfname;

i=0;
while( p[len - i-1] != '\\'){
i++;
}

i++;

for(j=0; i < len; i++,j++){
tete_fname[j] = p[len - i-1];
}

tete_fname[j] = '\0';

fname.ReleaseBuffer();

Cfname = tete_fname;
Cfname.MakeReverse();

return(Cfname);
}


引用未解決
トピックタグ
tete2000
 tete2000
(@tete2000)
ゲスト
結合: 16年前
投稿: 8
Topic starter  

すみません
変数の初期化のところで\が正しく認識されませんね。
訂正させてください。

誤:CString fname = c:\tete\ひらがなフォルダ\aaaa.txt;
訂:CString fname = c:\\tete\\ひらがなフォルダ\\aaaa.txt;


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

splitpath ぢゃだめ?


返信引用
nori
 nori
(@nori)
ゲスト
結合: 23年前
投稿: 9
 

つ PathRemoveFileSpec

# shlwapi.libの追加が必要


返信引用
tete2000
 tete2000
(@tete2000)
ゲスト
結合: 16年前
投稿: 8
Topic starter  

>tetrapod様

アドバイスありがとうございます。
私がやりたかったことはsplitpathで簡単に実現できるのですね。

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


返信引用
tete2000
 tete2000
(@tete2000)
ゲスト
結合: 16年前
投稿: 8
Topic starter  

>>nori様

PathRemoveFileSpec なんてすばらしい関数があるのですので。
教えてくださりありがとうございました。


返信引用
2リットル
 2リットル
(@2リットル)
ゲスト
結合: 18年前
投稿: 9
 

最初のコードは反転前の文字列を返していませんか?
return(Cfname);

return Cfname.MakeReverse();


返信引用
akey
 akey
(@akey)
ゲスト
結合: 22年前
投稿: 53
 

>最初のコードは反転前の文字列を返していませんか?
VC6.0なので反転していると思いますが・・

[VC6.0]
CString::MakeReverse
void MakeReverse( );

[VC2005]
CStringT::MakeReverse
CStringT& MakeReverse();


返信引用
2リットル
 2リットル
(@2リットル)
ゲスト
結合: 18年前
投稿: 9
 

失礼しました。vc6.0でしたね。
ご指摘ありがとうございます。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

VC6のときは戻り値がなくて、2005なら戻り値があるが
MakeReverseを呼べば、本体の順番が入れ替わるという動作するのは
どっちも変わらないのでは?


返信引用
2リットル
 2リットル
(@2リットル)
ゲスト
結合: 18年前
投稿: 9
 

VC2008になりますが、本体側も反転していますね。
勘違いしていました。

それと、VC2008ではマルチバイト文字セット、ユニコードともに
c:\\tete\\ひらがなフォルダをMakeReverse()で正しく反転できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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