我有一个CString st= $/Abc/cda/($/dba/abc)/
。我想仅替换第一次出现的$
为c:\
。
我尝试使用以下方法进行替换:
st.Replace("$","c:\");
但它替换了所有的$
字符。
是否可以提供一种逻辑,只替换第一个字符呢?
我有一个CString st= $/Abc/cda/($/dba/abc)/
。我想仅替换第一次出现的$
为c:\
。
我尝试使用以下方法进行替换:
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:\\");
}
使用
find_first_of
// 返回字符串第一次出现的迭代器
然后使用
replace
// 用指向第一次出现的迭代器来替换
SetAt
与FindFirstOf
结合使用。 FindFirstOf
将找到要替换的字符的第一次出现的索引。通过将其作为SetAt
的第一个参数传递,并将替换字符作为第二个参数传递,您可以将第一个"$"替换为"#":
st.SetAt( st.FindOneOf( "$" ), "#");
然而,对于问题中提到的特定情况,这并不适用,因为您需要将"$"字符替换为多字符字符串。 为此,您需要使用{{link1:Edward Clements's solution}}。
L"C:/"
或_T("C:/")
。 - olevegardCString::SetAt()
接受单个字符,而不是字符串! - Edward Clementsint 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;
}
Replace
? 为什么要用 "R"? - Maroun