CString::Replace関数を使用せずに文字列内の"+"を"-"に置換したいのですが、どうすればよいのでしょうか?
例えば、
CString a;でa={"aaa+bb+cc"}を
Cstring b;でb={"aaa-bb-cc"}
に置換したり、
CStringList list;のようなリストを構築して
CString aの中に{"aaa+bb+cc"}と{"+ddd+ee+fff+"}と{"g+hhh+i"}
があったとした場合、aのリストの"+"を全て"-"にできますでしょうか?
ご教授お願いします。
文字の置換はCStringにそのまんまの名前のメンバ関数があります。
MSDN見てください。
>CString a;でa={"aaa+bb+cc"}を
>Cstring b;でb={"aaa-bb-cc"}
aからbにコピーした後置換すればいいでしょう。
>CStringList list;のようなリストを構築して
>CString aの中に{"aaa+bb+cc"}と{"+ddd+ee+fff+"}と{"g+hhh+i"}
>があったとした場合、aのリストの"+"を全て"-"にできますでしょうか?
リストの各要素に置換を行えばいいです。
> CString::Replace関数を使用せずに
その前に、なぜ使用しないのか理由を書きま。
> リストの"+"を全て"-"にできますでしょうか?
...MFCをVBかScriptとかと勘違いしてる?
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200311/03110015.txt
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200311/03110023.txt
結局何がしたいの?
もしかしてちょっと疑問に思ったことを片っ端から聞いてるだけ?
Replace関数を使用するとCStringのメンバではありませんとなってしまいます。(使用ソフトVC5.0)したがってReplace関数のような置換を行いたいのですがなかなかCStringも文字列から指定文字を置換できずに悩んでいます。
編集 削除>Replace関数を使用するとCStringのメンバではありませんとなってしまいます。(使用ソフトVC5.0)
VC5.0のMFCではCString::Replaceが無いってこと?そんなバカな。
それともMFC以外のライブラリでのCStringを使ってるのかな?
一文字置き換えるだけなら
CString string;
string = "abc+";
string.SetAt (3,'-' );
とか出来るけどReplaceが使えないんじゃこれもダメかな?
ちょっと詳しい環境とソースも提示してよ。
MFC使ってるかどうかコンソールアプリなのかMFCAppWizardなのかとか
Windowsのヴァージョンとか。
コンソールアプリでした!!コンソールでReplace関数を引き出すためにはどうしたらよいでしょうか??
編集 削除前の質問は「本当に」解決したのですか?
それならここで改めて訊くはずもないか...
VC++6 の App.Wizard なら「コンソールアプリでMFC」という選択肢が出ます。
VC++5 には無かったはず。
でもまあ MSDN で AfxWinInit の説明見れば簡単でしょう。
CString a=_T("a+b+c");
a.Replace(_T("+"), _T("-"));
で楽勝。
CString::ReplaceはVC++6.0以降付属のMFCでないと使えません。
CString::FindとCString::SetAtで代用でしょうね。
>CString::ReplaceはVC++6.0以降付属のMFCでないと使えません。
なんとそうですか!困り者ですね。
>CString::FindとCString::SetAtで代用でしょうね。
御意。
文字数が変わらないなら CString など使わずとも
char* func(char* s) {
for (char* p=strchr(s, '+'); p; p=strchr(p, '+')) *p='-';
return s;
}
とか。
文字数が変わるのならメンドクサイですね。
STL がまともに使えるのなら例えば
http://cham.ne.jp/piro/p_cp.html
とか。
でも VC++5 って *まともな* STL 使えましたっけ?
え〜っと,dinkumwareの訴訟の話を考えると,VC++ 6.0とほとんど変わらないはずです。
#つまりは,あまり「まとも」とは言えない。
でも,例示されたreplace関数程度ならまともに動きますよ。
メモリが無くなるとbad_allocも発生させずに落ちてくれますが……。
Replace関数も対応していないのですがInsert関数も対応してませんよね?
CStrins a = "cc=bb"の文字列の空白を挿入してa = "cc = bb"
とか?を挿入してa = "cc = ?bb"とかしたいのですがどうすればよいでしょうか?
簡単な解決策。
VC++5 を捨てて VC++7 (VC++.net) に乗り換える。
CString を捨てて std::string を使う。
がんばって自分で作る。
# 大マヂっす。
# 古い処理系で無駄な努力を続ける人件費より
# 新しい処理系を購入する費用のほうが安いと思う。
そこまでするなら、普通にCStringを継承して各メンバを追加したら?
少しは自分でプログラムしる!
> 少しは自分でプログラムしる!
それは私に言ってる?それとも元発言者に言ってる?
まあ言い出しっぺさんが実装してあげてください。
私は車輪の再実装はゴメンです。再発明ならまだしも。
再実装たってほんの数行でせう。
10行程度のプログラムがそんなにキツイ仕事場なのデスカ?と思ってもみたり。
費用を抑えたいならばOpenSourceへの参加をお勧めしま。
MFCなんかよりboostの方が確実に開発効率・速度・移植性が高いぞ〜。
レス違いゴメソ。
解決印がないので...
char s[1024];
CString a = "a+b+c+d";
strcpy( s, a );
char * p;
for( p = s; *p; p ++ )
{
if( *p == '+' ) *p = '-';
}
CString b = s;
strchr() を呼び出すオーバヘッドを考えたらこのほうが速いなり。
C言語レベルでいいところをわざわざクラスにしなくてもよいのでは。