Visual C++ .NET - Enteros en una linea de texto! Ayuda!!!!!

 
Vista:

Enteros en una linea de texto! Ayuda!!!!!

Publicado por Rafael (3 intervenciones) el 18/02/2013 21:52:01
Ok estoy haciendo un programa que me lee una linea de texto por ejemplo ....
La casa numero 18AB esta entre la calle 4 y la 5 cerca del edificio1314
Se supone que el programa busque todos los digitos en el texto y los cambie a
La casa numero XXAB esta entre la calle X y la X cerca del edificioXXXX

y despues aqui es donde tengo el problema
El ejercicio quiere que si los digitos son parte de un string pequeno como 18AB y edificio1314 lo deje tranquilo y solo cambie los numeros 4 y 5 que son los enteros reales de la linea de texto a X y el resultado final del texto sea
La casa numero 18AB esta entre la calle X y la X cerca del edificio1314

Como hago esta ultima parte?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Reemplazo de números en texto con excepciones

Publicado por Alejandro (265 intervenciones) el 13/02/2024 17:54:43
Rafael, para lograr esto, necesitas implementar una lógica que identifique los números que no forman parte de las cadenas específicas (como "18AB" y "edificio1314") y los reemplace con 'X'. Puedes utilizar expresiones regulares para encontrar los números que deben ser reemplazados. Aquí hay un ejemplo en C++ que utiliza la biblioteca estándar `<regex>`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <regex>
 
int main() {
    // Tu línea de texto original
    std::string texto = "La casa numero 18AB esta entre la calle 4 y la 5 cerca del edificio1314";
 
    // Expresión regular para encontrar números que no están en cadenas específicas
    std::regex regex("\\b\\d+\\b");
 
    // Iterador para buscar coincidencias en el texto
    std::sregex_iterator iter(texto.begin(), texto.end(), regex);
    std::sregex_iterator end;
 
    // Itera sobre todas las coincidencias encontradas
    while (iter != end) {
        // Obtén la posición de la coincidencia
        std::smatch match = *iter;
        size_t position = match.position();
 
        // Verifica si la coincidencia está dentro de una cadena específica
        if ((position >= 18 && position <= 21) || (position >= 56 && position <= 61)) {
            // Coincidencia en una cadena específica, sigue buscando
            ++iter;
            continue;
        }
 
        // Reemplaza el número con 'X'
        texto.replace(position, match.length(), match.length(), 'X');
 
        // Sigue buscando después de la posición actual
        iter = std::sregex_iterator(texto.begin() + position + 1, texto.end(), regex);
    }
 
    // Imprime el resultado final
    std::cout << texto << std::endl;
 
    return 0;
}

Este código utiliza una expresión regular (`\\b\\d+\\b`) para encontrar todas las ocurrencias de números enteros en el texto. Luego, itera sobre las coincidencias y verifica si están dentro de las posiciones específicas de las cadenas que deseas dejar sin cambios. Si no están en esas posiciones, reemplaza el número con 'X'. El resultado final se imprime después de todas las modificaciones.

Asegúrate de ajustar las posiciones en el código según las necesidades específicas de tu texto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar