我有一个CString st= $/Abc/cda/($/dba/abc)/
. 我只想替换第一次出现的$
with c:\
。
我试图替换为
st.Replace("$","c:\");
但它取代了所有出现的$
.
您能否建议我任何仅替换第一次出现的字符的逻辑。
我有一个CString st= $/Abc/cda/($/dba/abc)/
. 我只想替换第一次出现的$
with c:\
。
我试图替换为
st.Replace("$","c:\");
但它取代了所有出现的$
.
您能否建议我任何仅替换第一次出现的字符的逻辑。
由于您将单个字符替换为三个字符,因此您可以使用CString::Find()
and then CString::Delete()
and CString::Insert()
,例如
int nInx = st.Find('$');
if (nInx >= 0)
{ st.Delete(nInx, 1);
st.Insert(nInx, _T("C:\\");
}
利用
find_first_of
//将迭代器返回到第一次出现的字符串
接着
replace
//替换指向第一次出现的迭代器
您可以使用void SetAt( int nIndex, TCHAR ch );
仅替换一个字符。然后int FindOneOf( LPCTSTR lpszCharSet ) const;
找到$的第一次出现。
像这样 :
st.SetAt( st.FindOneOf( "$" ), "C:/");
这是一个封装了 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;
}