una - Eliminar el último carácter de la cadena C++
obtener el primer caracter de una cadena c++ (12)
Con C ++ 11, ni siquiera necesita la longitud / tamaño. Siempre que la cadena no esté vacía, puede hacer lo siguiente:
if (!st.empty())
st.erase(std::prev(st.end())); // Erase element referred to by iterator one
// before the end
¿Cómo puedo eliminar el último carácter de una cadena de C ++?
Intenté st = substr(st.length()-1);
Pero no funcionó.
Enfrentó la misma situación y encontró tal solución:
CString str;
// working with this variable
if (!str.IsEmpty()) // or if(str.GetLength() > 0)
str.Delete(str.GetLength()-1);
Tal vez sea útil para alguien.
Eso es todo lo que necesitas:
#include <string> //string::pop_back & string::empty
if (!st.empty())
st.pop_back();
Para C ++ 11 puedes usar string :: back like,
std::string stringName ("milan#") ;
stringName.back() =''$'';
std::cout<<stringName;
**Output:**
milan$
Para una versión no mutante:
st = myString.substr(0, myString.size()-1);
Si la longitud no es cero, también puede
str[str.length() - 1] = ''/0'';
Solución simple si está usando C ++ 11. Probablemente O (1) vez también:
st.pop_back();
str.erase( str.end()-1 )
Referencia: std :: string :: erase () prototype 2
no es necesario c ++ 11 o c ++ 0x.
str.erase(str.begin() + str.size() - 1)
str.erase(str.rbegin())
no se compila desafortunadamente, ya que reverse_iterator
no se puede convertir a un_nombre_normal.
C ++ 11 es tu amigo en este caso.
buf.erase(buf.size() - 1);
Esto supone que sabes que la cadena no está vacía. De ser así, obtendrás una excepción out_of_range
.
if (str.size () > 0) str.resize (str.size () - 1);
Una alternativa std :: erase es buena, pero me gusta el "- 1" (ya sea basado en un tamaño o un iterador final) - para mí, ayuda a expresar la intención.
Por cierto, ¿realmente no hay std :: string :: pop_back? - parece extraño.
int main () {
string str1="123";
string str2 = str1.substr (0,str1.length()-1);
cout<<str2; // output: 12
return 0;
}