C/Visual C - Leer texto modo gráfico y funciones copy e insert

 
Vista:

Leer texto modo gráfico y funciones copy e insert

Publicado por DM (9 intervenciones) el 03/10/2001 00:40:33
Lo que estoy tratando de hacer son dos dos cosas:
1. Crear unas funciones que sean equivalentes a las funciones copy e insert de Pascal.
2. Crear una caja de texto en modo gráfico, similar a la de Windows.

Yo manejo los modos VESA y se imprimir en pantalla por medio de esos modos, pero me interesa saber más sobre la primer preguntam pues ya prácticamente tengo diseñado la caja de texto pero quiero implementarla con las esas funciones.
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

Implementación de funciones equivalentes a `copy` e `insert` de Pascal

Publicado por Alejandro (913 intervenciones) el 16/10/2024 19:03:07
Para crear funciones en C que sean equivalentes a las funciones `copy` e `insert` de Pascal, primero definamos cómo funcionan estas funciones:

- `copy(s, i, n)`: Devuelve una subcadena de `s` que comienza en la posición `i` y tiene longitud `n`.
- `insert(s1, s2, i)`: Inserta la cadena `s1` en la cadena `s2` en la posición `i`.

A continuación, te muestro cómo implementar estas funciones en C.

1. Función `copy`



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
char* copy(const char* s, int i, int n) {
    if (i < 1 || i > strlen(s) || n < 0) {
        return NULL; // Manejo de errores
    }
 
    // Ajustar el índice para que sea 0-based
    i--;
 
    // Asegurarse de que no exceda el tamaño de la cadena
    if (i + n > strlen(s)) {
        n = strlen(s) - i;
    }
 
    char* result = (char*)malloc(n + 1); // +1 para el carácter nulo
    if (result) {
        strncpy(result, s + i, n);
        result[n] = '\0'; // Asegurarse de que la cadena esté terminada
    }
    return result;
}

2. Función `insert`



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char* insert(const char* s1, const char* s2, int i) {
    if (i < 1 || i > strlen(s2) + 1) {
        return NULL; // Manejo de errores
    }
 
    // Ajustar el índice para que sea 0-based
    i--;
 
    // Crear una nueva cadena para el resultado
    char* result = (char*)malloc(strlen(s1) + strlen(s2) + 1); // +1 para el carácter nulo
    if (result) {
        // Copiar la parte antes de la inserción
        strncpy(result, s2, i);
        result[i] = '\0'; // Terminar la cadena
 
        // Concatenar s1
        strcat(result, s1);
        // Concatenar la parte después de la inserción
        strcat(result, s2 + i);
    }
    return result;
}

Ejemplo de uso



Aquí tienes un ejemplo de cómo usar estas funciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() {
    const char* original = "¡Hola, mundo!";
 
    // Usar la función copy
    char* subcadena = copy(original, 1, 4); // "Hola"
    printf("Subcadena: %s\n", subcadena);
    free(subcadena); // Liberar memoria
 
    // Usar la función insert
    const char* nuevoTexto = " bello";
    char* resultado = insert(nuevoTexto, original, 6); // "¡Hola, bello mundo!"
    printf("Resultado: %s\n", resultado);
    free(resultado); // Liberar memoria
 
    return 0;
}

3. Crear una caja de texto en modo gráfico



Para crear una caja de texto en modo gráfico, puedes usar las funciones de dibujo de tu biblioteca gráfica (como VESA). Aquí hay un esquema básico de cómo podrías implementar una caja de texto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void dibujarCajaTexto(int x, int y, int ancho, int alto) {
    // Dibuja el borde de la caja
    // Usa funciones de tu biblioteca gráfica para dibujar líneas
    // Por ejemplo:
    // line(x, y, x + ancho, y); // Línea superior
    // line(x, y + alto, x + ancho, y + alto); // Línea inferior
    // line(x, y, x, y + alto); // Línea izquierda
    // line(x + ancho, y, x + ancho, y + alto); // Línea derecha
}
 
void mostrarTexto(int x, int y, const char* texto) {
    // Usa funciones de tu biblioteca gráfica para mostrar texto
    // Por ejemplo:
    // outtextxy(x, y, texto);
}

Notas finales



- Manejo de memoria: Asegúrate de liberar la memoria que asignas con `malloc` para evitar fugas de memoria.
- Errores: Implementa un manejo de errores adecuado para las funciones.
- Biblioteca gráfica: Asegúrate de que las funciones gráficas que uses sean compatibles con tu entorno de desarrollo.

¡Buena suerte con tu proyecto, D.M.!
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