2014-05-23 21 views
17

Jak usunąć pierwszą i ostatnią literę ze std :: string, już robię poniższy kod.Usuń pierwszą i ostatnią postać C++

Ale ten kod usuwa tylko ostatni znak

m_VirtualHostName = m_VirtualHostName.erase(m_VirtualHostName.size() - 1) 

Jak usunąć pierwszy znak również?

+8

Ten kod będzie się rozwijał, jeśli ciąg znaków jest pusty. – PaulMcKenzie

+1

Jakiego typu jest m_VirtualHostName? – LVBen

+0

@PaulMcKenzie, więc muszę najpierw sprawdzić poprawność, jeśli parametr VirtualHostName nie jest pusty. –

Odpowiedz

34

Cóż, można erase() pierwszy znak zbyt (zauważ, że erase() modyfikuje ciąg znaków):

m_VirtualHostName.erase(0, 1); 
m_VirtualHostName.erase(m_VirtualHostName.size() - 1); 

Ale w tym przypadku, prostszym sposobem jest podjęcie podciąg:

m_VirtualHostName = m_VirtualHostName.substr(1, m_VirtualHostName.size() - 2); 

Uważaj, aby sprawdzić, czy ciąg ma co najmniej dwa znaki w nim najpierw ...

+0

to zawiedzie, jeśli mam tylko 2 znaki? –

+0

@Putra: Tak. C++ nie jest szczególnie przyjazny w ten sposób ;-) ** Edit **: Nie, źle odczytałem twój komentarz. Spowoduje to awarię, jeśli masz * mniej niż * dwa znaki (0 lub 1). – Cameron

+1

@PutraFajarHasanuddin Będzie to, gdy nie masz żadnego lub 1 znak w ciągu znaków. Jest to udokumentowane [tutaj] (http://en.cppreference.com/w/cpp/string/basic_string/erase). Wykonuj tylko drugą linię, gdy ['size()'] (http://en.cppreference.com/w/cpp/string/basic_string/size) zwraca co najmniej 1. – Appleshell