2013-06-19 16 views
5

Ho un CString st= $/Abc/cda/($/dba/abc)/. Voglio sostituire solo la prima occorrenza di $ con c:\.Come sostituire solo la prima occorrenza di carattere in CString?

ho cercato di sostituire come

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

Ma sostituito tutte le occorrenze di $.

Potrebbe suggerirmi qualsiasi logica per sostituire solo la prima occorrenza di carattere.

+0

Cosa 'Sostituisci' è questo? Perché è con "R"? – Maroun

+1

@MarounMaroun Questo è MFC [CString :: Replace] (http://msdn.microsoft.com/en-us/library/ztyt5e9c (v = vs.100) .aspx), sostituirà tutte le occorrenze di una stringa o un personaggio –

+0

@EdwardClements Grazie :) – Maroun

risposta

4

Dal momento che si sta sostituendo un singolo carattere da tre personaggi, è possibile utilizzare CString::Find() e poi CString::Delete() e CString::Insert(), come

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

Grazie. sta funzionando bene. :) – user2499879

0

Usa

find_first_of // restituisce l'iteratore alla prima occorrenza di stringa

e poi

replace // per sostituire l'iteratore che punta alla prima occorrenza

+0

if (st.FindOneOf ("$") == 0) st.Replace ("$", "c: \"); Ho provato in questo modo, ma ha sostituito tutti i casi. Ho confronto con 0 perché conosco la prima occorrenza di charater. – user2499879

+0

@ user2499879 L'istruzione if non aiuta. Si afferma solo che se il primo carattere è $, quindi sostituire TUTTE le occorrenze di $ – olevegard

+0

Ma voglio solo sostituire la prima occorrenza di carattere. Allora perché sostituisco ogni occorrenza. – user2499879

0

Si potrebbe usare void SetAt(int nIndex, TCHAR ch); per sostituire un solo carattere. E quindi int FindOneOf(LPCTSTR lpszCharSet) const; per trovare la prima occorrenza di $.

Ti piace questa:

st.SetAt(st.FindOneOf("$"), "C:/"); 
+0

Ho provato ma ho sostituito $ con un po 'di valore. un po 'di tempo arriva il simbolo della pipa e un po' di tempo 4. Sto usando così st.SetAt (st.FindOneOf ("$"), _TCHAR ("C: /")) ;. – user2499879

+0

@ user2499879 Avete bisogno del _TCHAR? Se non funziona senza, prova 'L" C:/"' o '_T (" C:/")' – olevegard

+1

'CString :: SetAt()' accetta un singolo carattere, non una stringa! –

0

Ecco una funzione che racchiude in sé la risposta accettata da 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; 
} 
Problemi correlati