elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cadenas de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cadenas de caracteres  (Leído 6,838 veces)
Angel Zero

Desconectado Desconectado

Mensajes: 92


ZERO


Ver Perfil WWW
Cadenas de caracteres
« en: 3 Junio 2011, 07:23 am »

jejeje, volvi :xD, con otro problemas...

Citar
#include<string.h>
#include<conio.h>
#include<stdio.h>
char R[40], T;
int P;
void main ()
{
 clrscr();
  gotoxy(32,4);printf("MENU STRING\n");
  gotoxy(24,8);printf("DIGITE EL STRING: ");
  fflush(stdin);
  gets(R);
  clrscr();
  printf("Posicion caracter a insertar: ");
  scanf("%d",&P);
  printf("Caracter a insertar: ");
  fflush(stdin);
  T=getchar();
  R[P]=T ;
  puts(R);
  getch();
}

lo que logre aqui, fue reemplazar un caracter en una posicion "X", por otro diferente en esta misma posicion, pero lo que necesito es "Añadir" y "Retirar" un caracter
Ejemplo:
Amerca..... añadir la "i" para que diga "America"
Ameriica... Retirar la "i" para que diga " America".

No se como hacerlo, tenia la idea de un

Citar
R[P+1]=T ;

Pero solo lograria reemplazar el caracter siguiente despues de "P". asi que ni idea de como se hace.

Gracias por la ayuda :D


En línea

Zero
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #1 en: 3 Junio 2011, 13:02 pm »

Hola

Para hacer lo que pides debes recorrer la cadena desde el final hasta la posición que quieres y luego insertas. Un ejemplo:

Código
  1. int main()
  2. {
  3. .......
  4. .......
  5. int i;
  6. i = strlen(R); // almacena en i la longitud de la cadena
  7. R[i+1] = '\0'; // finalizamos la cadena
  8. for(; i>P; i--) // vamos recorriendo la cadena de atrás hacia delante
  9.    R[i] = R[i-1];
  10. R[i] = T; // insertamos el nuevo caracter
  11. ..........
  12. ..........
  13. return 0;
  14. }
  15.  

Y para quitar un caracter lo que debes hacer es recorrer la cadena desde la posición que quieres hasta el final sobrescribiendo los caracteres:
Código
  1. for(i=P; i<strlen(R); i++)
  2.    R[i] = R[i+1];
  3.  

Además debes tener en cuenta que main debe devolver un int para indicar al SO el resultado de su finalización y que no es bueno utilizar conio porque está en desuso. Léete esto

Saludos


En línea

Breakbeat como forma de vida
Mr.Blue


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #2 en: 3 Junio 2011, 19:58 pm »

Citar
R[i+1] = '\0';
Esto lo hace automaticamente cuando ingresas la cadena y das enter.

En general esta mal, satu, el codigo que pones hace esto.

Citar
Cadana:
amerca
Posicion a insertar:
4
Caracter:
i
Salida:
ameria

Reemplazas el caracter, no insertas.

Lo mismo pasaria si lo haces con el de retirar, quedaria.
Citar
Salida:
ameri ca

Creo que la mejor solucion a esto es dividir la palabra y guardarla en una cadena, para luego concatenar con strcat o  con strncat

Algo asi
guardar en una cadena grande, amer
en otra cadena, ca
hacer un t[0]=getchar();
y concatenar
strcat (cadenagrande, t); //queda amerI
strcat (cadenagrande,cadena)//queda ameriCA

Saludos.
En línea

Angel Zero

Desconectado Desconectado

Mensajes: 92


ZERO


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #3 en: 3 Junio 2011, 20:17 pm »

pero entonces como corto el string. tenia pensado algo asi
un for que me valla guardando las posiciones i en una variable

Cambie el algoritmo.

Citar
#include<conio.h>
#include<stdio.h>
#include<string.h>
int i, j, k;
char c[40], d[40], f[40], t[40];
void main()
{
clrscr();
printf("Escriba String: ");
fflush(stdin);
gets(c);
i=strlen(c);
printf("Escriba la posicion: ");
fflush(stdin);
scanf("%d",&j);
for (i=1;i<j;i++)
{
d=c;
}
for (i=i;i>j;i--)
{
f=c;
}
printf("Escriba el caracter: ");
fflush(stdin);
gets(t);
strcat (d,t);
strcat (d,f);
clrscr();
printf("El nuevo string es: %s", d);
getch();
}

Ahora, no se que error hay, pero a mi me compila, pero no me imprime el resultado, llega hasta ahi...

Citar
printf("El nuevo string es: %s, d");

Haber, y solo me muestra el nuevo caracter que meti, nada mas.

Y pues me toca usar esas librerias pues la clase es turbo C, y no me permiten usar mas.
gracias por la respuesta :D
« Última modificación: 3 Junio 2011, 21:47 pm por Angel Zero » En línea

Zero
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #4 en: 3 Junio 2011, 22:12 pm »

Hola

Acabo de probar lo que posteé antes y funciona perfectamente, lo unico que tienes que tener cuidado con la posición que indicas ya que se empieza a contar desde 0, pero se arregla con
Código
  1. for(; i>P-1; i--)

Aquí pongo el code entero para que lo pruebes y prueba a quitar R[i+1] = '\0'; haber qué pasa...

Código
  1. #include<string.h>
  2. #include<stdio.h>
  3.  
  4. int main ()
  5. {
  6.    char R[40], T;
  7.    int P, i;
  8.  
  9.    printf("MENU STRING\n");
  10.    printf("DIGITE EL STRING: ");
  11.    scanf("%s", R);
  12.  
  13.    printf("Posicion caracter a insertar: ");
  14.    scanf("%d",&P);
  15.  
  16.    while(getchar()!='\n') ;
  17.  
  18.    printf("Caracter a insertar: ");
  19.    scanf("%c", &T);
  20.  
  21.    i = strlen(R); // almacena en i la longitud de la cadena
  22.    R[i+1] = '\0'; // finalizamos la cadena
  23.  
  24.    for(; i>P-1; i--) // vamos recorriendo la cadena de atrás hacia delante
  25.        R[i] = R[i-1];
  26.  
  27.    R[i] = T; // insertamos el nuevo caracter
  28.    printf("%s", R);
  29.  
  30.    while(getchar()!='\n') ;
  31.  
  32.    return 0;
  33. }
  34.  

Edito: se puede quitar
Código
  1. R[i+1] = '\0';
si ponemos esto
Código
  1. i = strlen(R)+1;

Saludos
« Última modificación: 3 Junio 2011, 22:15 pm por satu » En línea

Breakbeat como forma de vida
Angel Zero

Desconectado Desconectado

Mensajes: 92


ZERO


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #5 en: 3 Junio 2011, 23:35 pm »

Quedo muy bien, pero (aunque no creo que sea de importancia) si ingresas una cadena que lleve espacios en algun lado, y la posicion pasa del espacio, te pone el caracter al final de la primera linea...

pero ya asi esta bien.

Gracias por toda la ayuda

Edito:
Ahora tengo un problema nuevo

Citar
#include<conio.h>
#include<string.h>
#include<stdio.h>

void main ()
{
    clrscr();
    char R[40], T;
    int P, i, M, e[50];

    printf("MENU STRING\n");
    printf("DIGITE EL STRING SEPARANDOLO POR UN _: ");
    fflush(stdin);
    scanf("%s", R);
    i = strlen(R);
    printf("Caracter a BUSCAR: ");
    fflush(stdin);
    scanf("%c", &T);
    for(;i=0;i++)
     {
     if (T=R)
      {
       M++;
       e=i;
      }
     }
    printf("El string tiene %d veces el caracter ingresado, y sus posiciones son %d", M, e);
    getch();
}

lo que se pretende es alla un Caracter "X" en la linea que el usuario ingresa, como pueden ver trate de usar un vector, y tambien un acumulador... pero los resultados finales no son correctos.

muchas gracias :D
« Última modificación: 4 Junio 2011, 00:45 am por Angel Zero » En línea

Zero
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Cadenas de caracteres
« Respuesta #6 en: 4 Junio 2011, 05:21 am »

Veo varias cosas mal, lo primero es que recorres mal el vector. Tu haces esto.

Código
  1. i = strlen(R);
  2. for(;i=0;i++)
  3.     {
  4.     if (T=R)
  5.      {
  6.       M++;
  7.       e=i;
  8.      }
  9.  

Eso es un bucle infinito, primero es que a i le das el valor del vector, es decir 40 y empiezas a sumar la 'i' hasta que 'i=0' (otra cosa que está mal, esto siempre será cierto, porque a 'i' le estas dando el valor 0, la comparación es hace con '==').

En definitiva, para recorrer el vector tienes 2 posibilidades.
Código
  1. for (int i=0;i<strlen(R);i++)
  2. o bien
  3. for (int i=strlen(R);i>=0;i--)
  4.  

Despues vuelves a hacer mal la comparación

Código
  1. if (T=R)
  2. La comparación es '==', y además tienes que compararlo caracter a caracter
  3. if (T==R[i])
  4.  

Finalmente debes añadir todas las posiciones al array e. Podrías hacerlo de esta manera.

Código
  1. e[M]=i;
  2. M++;
  3.  

Por cierto, no inicializas "M" al principio, eso podría darte problemas. Recuerda inicializar siempre las variables.

Y creo que no me dejo nada.

Un saludo.
En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #7 en: 4 Junio 2011, 11:43 am »

si ingresas una cadena que lleve espacios en algun lado, y la posicion pasa del espacio, te pone el caracter al final de la primera linea...

Eso pasa porque lees la cadena con scanf, utiliza fgets y ya podrás leer cadenas con espacios

Saludos


EDITO:

Este es mi mensaje nº 100

Sí, me hace ilusión
« Última modificación: 4 Junio 2011, 11:51 am por satu » En línea

Breakbeat como forma de vida
Angel Zero

Desconectado Desconectado

Mensajes: 92


ZERO


Ver Perfil WWW
Re: Cadenas de caracteres
« Respuesta #8 en: 4 Junio 2011, 18:19 pm »

Listo, todo muy lindo, me imprime la cantidad y las posiciones, pero en las posiciones me esta imprimiendo un valor de mas

Citar
#include<conio.h>
#include<string.h>
#include<stdio.h>

void main ()
{
    clrscr();
    char R[40], T;
    int P, i, j, M=0, e[50];

    printf("MENU STRING\n");
    printf("DIGITE EL STRING SEPARANDOLO POR UN _: ");
    fflush(stdin);
    scanf("%s", R);
    printf("Caracter a BUSCAR: ");
    fflush(stdin);
    scanf("%c", &T);
    for(i=strlen(R);i>=0;i--)
     {
     if (T==R)
      {
       e[M]=i;
       M++;
      }
     }
    printf("El string tiene %d, y sus posiciones son: ", M);
    for(j=0; j<=M; j++)
 {
  printf("%d ", e[j]);
 }
 getch();
}

Digamos que le ingrese "asdfasdf", y le pedi que me buscara la "a", me dice que hay 2 y me dice que sus posiciones son 5 1 9... "9"... porque aparece ese 9, mostrando 3 posiciones, sabienddo que solo hay dos??

Gracias por toda la ayuda :D
En línea

Zero
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Cadenas de caracteres
« Respuesta #9 en: 4 Junio 2011, 18:34 pm »

A la hora de imprimir el resultado te estás pasando en el recorrido del array

Esto tienes tú.
Código
  1.    for(j=0; j<=M; j++)
  2. {
  3.  printf("%d ", e[j]);
  4. }
  5.  
Debería ser así
Código
  1.    for(j=0; j<M; j++)
  2. {
  3.  printf("%d ", e[j]);
  4. }
  5.  
Date cuenta que los arrays en C y C++ tienen el siguiente rango [0,N-1] y no [1,N]


De todas maneras me extraña que te funcione algo, porque sigues haciendo mal la comprobación

Código
  1. if (T==R)
  2. debería ser
  3. if (T==R[i])
  4.  
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cadenas de caracteres solucionado
Programación General
malocha 0 1,008 Último mensaje 18 Julio 2011, 00:18 am
por malocha
Cambiar caracteres en cadenas --en C--
Programación C/C++
n_n 9 7,773 Último mensaje 2 Noviembre 2011, 01:27 am
por rir3760
Me podrian ayudar!!!!!! caracteres por cadenas?? y contar nodos con recursion???
Programación C/C++
Principios en C 8 5,358 Último mensaje 11 Noviembre 2011, 01:28 am
por Principios en C
Cadenas de caracteres
Programación C/C++
carmelina 2 1,251 Último mensaje 7 Mayo 2012, 03:46 am
por andres_5
Cadenas de caracteres con punteros
Programación C/C++
pedroedlp 4 1,197 Último mensaje 12 Abril 2014, 17:25 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines