2013-06-19 9 views
5

私はCString st= $/Abc/cda/($/dba/abc)/を持っています。私は$の最初のオカレンスだけをc:\と置き換えたいと思います。CStringで文字の最初のオカレンスのみを置き換える方法は?

私は

st.Replace("$","c:\"); 

として置き換えることを試みた。しかし、それは$のすべての発生を置き換えます。

文字の最初のオカレンスだけを置き換えるロジックを教えてください。

+0

「置換」はこれですか?なぜそれが "R"であるのですか? – Maroun

+1

@MarounMarounこれは、MFC [CString :: Replace](http://msdn.microsoft.com/en-us/library/ztyt5e9c(v = vs.100).aspx)であり、文字列または文字 –

+0

@EdwardClementsありがとう:) – Maroun

答えて

4

あなたは3つの文字で一文字を交換しているので、ここで

int nInx = st.Find('$'); 
if (nInx >= 0) 
{ st.Delete(nInx, 1); 
    st.Insert(nInx, _T("C:\\"); 
} 
+0

ありがとうございます。それは正常に動作しています。 :) – user2499879

0

使用

find_first_of //あなたが使用できる最初のoccurance

+0

if(st.FindOneOf( "$")== 0) st.Replace( "$"、 "c:\");私はそのようにしようとしましたが、そのすべてが置き換えられました。私はチャーターの最初の出現を知っているので、0と比較しています。 – user2499879

+0

@ user2499879 ifステートメントは役に立ちません。最初の文字が$の場合は、$ – olevegard

+0

のすべての文字を置き換えますが、文字の最初の出現を置き換えたいだけです。なぜ私はすべての出現を置き換えるのですか? – user2499879

0

を指すイテレータを置き換えるために// replaceを文字列

の最初のoccuranceにイテレータを返し、その後

void SetAt(int nIndex, TCHAR ch);を使用して1文字のみを置き換えます。 そしてint FindOneOf(LPCTSTR lpszCharSet) const; $の最初の出現を見つける。

st.SetAt(st.FindOneOf("$"), "C:/"); 
+0

私は試しましたが、$をいくつかのゴミ値に置き換えました。いくつかの時間パイプのシンボルと時間が来る4.私はそのようなst.SetAt(st.FindOneOf( "$")、_TCHAR( "C:/"));を使用しています。 – user2499879

+0

@ user2499879 _TCHARが必要ですか? 'L 'C:/' 'や' _T( "C:/") ' – olevegard

+1

' CString :: SetAt() 'は文字列ではなく単一の文字を取ります。 –

0

がカプセル化する機能であるように、あなたは、CString::Find()、その後CString::Delete()CString::Insert()を使用することができます。このよう

エドワード・クレメンツからの回答を受け入れました:

int replaceFirstOf(CString& str, const LPCSTR pszOld, const LPCSTR pszNew) 
{ 
    int found = str.Find(pszOld); 
    if (found >= 0) 
    { 
     str.Delete(found, 1); 
     str.Insert(found, pszNew); 
    } 
    return found; 
} 
関連する問題