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.

Problema de sensibilidad de mayúsculas y minúsculas en vectores de cadenas de C++.

En c++, ‘A’ y ‘a’ son caracteres diferentes, si tenemos un vector que contiene letras tanto mayúsculas como minúsculas, cómo escribir una función que transforme este vector en algún vector que sea insensible a mayúsculas y minúsculas, por ejemplo, ‘ABba’ se convierte en lo mismo que ‘abba’.

Entonces, por ejemplo, quiero contar el número de caracteres diferentes dentro de la cadena, por ejemplo, “ABba”, en este caso la salida debe ser 2, porque A y a son 1 mismo grupo, B y b también son lo mismo, esta cadena también puede contener números, por ejemplo, ABba1212 -> la respuesta debería ser 4.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para transformar un vector que contiene letras mayúsculas y minúsculas en un vector insensible a mayúsculas y minúsculas, podemos iterar a través de cada elemento del vector y convertirlo a minúsculas utilizando la función incorporada tolower(). Luego podemos agregar el elemento convertido a un nuevo vector.

    Aquí está el código de la función:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    vector<char> to_lowercase(const vector<char>& v) {
        vector<char> resultado;
        for (auto c : v) {
            resultado.push_back(tolower(c));
        }
        return resultado;
    }
    
    int count_unique_chars(const string& s) {
        vector<char> v(s.begin(), s.end());
        v = to_lowercase(v);
        sort(v.begin(), v.end());
        auto it = unique(v.begin(), v.end());
        return distance(v.begin(), it);
    }
    
    int main() {
        string s = "ABba1212";
        int count = count_unique_chars(s);
        cout << "Número de caracteres únicos: " << count << endl; // Salida: 4
        return 0;
    }
    

    La función to_lowercase() toma un vector de caracteres como entrada y devuelve un nuevo vector donde todos los elementos han sido convertidos a minúsculas. Usamos la función push_back() para agregar cada elemento convertido al nuevo vector.

    La función count_unique_chars() toma una cadena como entrada, la convierte en un vector insensible a mayúsculas y minúsculas utilizando to_lowercase(), ordena el vector utilizando la función sort(), elimina duplicados utilizando la función unique(), y luego devuelve el número de elementos únicos utilizando la función distance().

    En la función main(), creamos una cadena s que contiene los caracteres “ABba1212”. Llamamos a la función count_unique_chars() con s como entrada y luego imprimimos el resultado. La salida es “Número de caracteres únicos: 4”, como se esperaba.

Comments are closed.