es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar punteros a cadenas en cpp?

Estoy estudiando punteros en C++. He estudiado el concepto de llamada por valor y llamada por referencia. Estoy tratando de crear una función para invertir una cadena que acepte un puntero a una cadena y el tamaño de la cadena. El código es el siguiente:

void reverse(string* str, int size)
{

int start = 0;
int end = size - 1;

while(start < end)
{
    swap(*str[start++], *str[end--]);
}
}

int main()
{

string str = "Something";

reverse(&str, str.length());

cout << "Reversed string: " << str << endl;

return 0;
}

Estoy obteniendo este error:

error: no match for ‘operator*’ (operand type is ‘std::string’ {aka
‘std::__cxx11::basic_string’})
   12 |         swap(*str[start++], *str[end--]);

No quiero usar un arreglo de caracteres, ¿hay alguna forma de hacerlo? Alguien por favor explique, ¿qué hay de malo en mi código? Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error en el código se debe a que el puntero a la cadena está siendo desreferenciado usando el operador *, sin embargo, una cadena no es un puntero, por lo que este operador no se puede aplicar. En su lugar, se debería usar el operador [] para acceder a los caracteres individuales de la cadena.

    El código corregido debería ser así:

    void reverse(string* str, int size)
    {
        int start = 0;
        int end = size - 1;
    
        while(start < end)
        {
            swap((*str)[start++], (*str)[end--]);
        }
    }
    
    
    int main()
    {
        string str = "Something";
    
        reverse(&str, str.length());
    
        cout << "Reversed string: " << str << endl;
    
        return 0;
    }
    

    Nótese el uso de paréntesis alrededor de *str para asegurarse de que se aplique el operador [] a la cadena a la que apunta.

Comments are closed.