7

我有一个CString st= $/Abc/cda/($/dba/abc)/. 我只想替换第一次出现的$with c:\

我试图替换为

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

但它取代了所有出现的$.

您能否建议我任何仅替换第一次出现的字符的逻辑。

4

4 回答 4

5

由于您将单个字符替换为三个字符,因此您可以使用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:\\");
}
于 2013-06-19T07:44:29.923 回答
2

利用

find_first_of//将迭代器返回到第一次出现的字符串

接着

replace//替换指向第一次出现的迭代器

于 2013-06-19T06:46:34.283 回答
0

您可以使用void SetAt( int nIndex, TCHAR ch );仅替换一个字符。然后int FindOneOf( LPCTSTR lpszCharSet ) const;找到$的第一次出现。

像这样 :

st.SetAt( st.FindOneOf( "$" ), "C:/");
于 2013-06-19T06:50:31.343 回答
0

这是一个封装了 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;
}
于 2017-02-16T20:22:49.460 回答