2013-06-19 3 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

Поскольку вы заменяете один символ трех символов, вы можете использовать CString::Find(), а затем CString::Delete() и CString::Insert(), как

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

Спасибо. он работает нормально. :) – user2499879

0

Использование

find_first_of // возвращает итератор на первое вхождение строки

, а затем

replace // заменить итератор, указывающий на первое вхождение

+0

if (st.FindOneOf ("$") == 0) st.Replace ("$", "c: \"); Я так пробовал, но его заменил все нахождение. Я сравниваю с 0, потому что я знаю первое появление charater. – user2499879

+0

@ user2499879 Оператор if не помогает. Он просто утверждает, что если первый символ равен $, то замените ВСЕ события $ – olevegard

+0

Но я хочу заменить только первое появление символа. Тогда зачем я все замечу. – user2499879

0

Вы можете использовать void SetAt(int nIndex, TCHAR ch); заменить только одного символа. И затем 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

Вот функция, которая инкапсулирует принятый ответ от Эдварда Клемента:

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; 
} 
Смежные вопросы