我有一個CString st= $/Abc/cda/($/dba/abc)/
。我只想用c:\
替換$
的第一個匹配項。如何只替換CString中第一次出現的字符?
我曾嘗試更換爲
st.Replace("$","c:\");
但它取代的$
所有發生。
請你給我建議任何邏輯,只取代第一次出現的字符。
我有一個CString st= $/Abc/cda/($/dba/abc)/
。我只想用c:\
替換$
的第一個匹配項。如何只替換CString中第一次出現的字符?
我曾嘗試更換爲
st.Replace("$","c:\");
但它取代的$
所有發生。
請你給我建議任何邏輯,只取代第一次出現的字符。
既然你是由三個字符替換單個字符,你可以使用CString::Find()
然後CString::Delete()
和CString::Insert()
,像
int nInx = st.Find('$');
if (nInx >= 0)
{ st.Delete(nInx, 1);
st.Insert(nInx, _T("C:\\");
}
謝謝。它工作正常。 :) – user2499879
使用
find_first_of
//返回迭代器到字符串中第一次出現
然後
replace
//更換迭代器,指向第一次出現
if(st.FindOneOf(「$」)== 0) st.Replace(「$」,「c:\」);我已經嘗試過,但它取代了所有的發生。我比較0,因爲我知道特徵的第一次出現。 – user2499879
@ user2499879 if語句沒有幫助。它只是說,如果第一個字符是$,那麼替換所有發生的$ – olevegard
但我只想替換字符的第一個出現。那我爲什麼要替換所有的發生。 – user2499879
你可以使用void SetAt(int nIndex, TCHAR ch);
來替換一個字符。 然後int FindOneOf(LPCTSTR lpszCharSet) const;
找到第一個出現的$。
像這樣:
st.SetAt(st.FindOneOf("$"), "C:/");
我試過了,但用一些垃圾值替換了$。一些時間來管道符號和一些時間4.我正在使用像st.SetAt(st.FindOneOf(「$」),_TCHAR(「C:/」));. – user2499879
@ user2499879你需要_TCHAR嗎?如果沒有它,那麼嘗試'L「C:/」'或'_T(「C:/」)' – olevegard
'CString :: SetAt()'只接受一個字符,而不是一個字符串! –
這裏是一個封裝了一個函數Edward Clements接受的答案:
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;
}
這是什麼'替換'?爲什麼它與「R」? – Maroun
@MarounMaroun這是MFC [CString :: Replace](http://msdn.microsoft.com/en-us/library/ztyt5e9c(v = vs.100).aspx),它會替換所有發生的字符串或一個字符 –
@EdwardClements謝謝:) – Maroun