Título: Cadenas de caracteres Publicado por: Angel Zero 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 Título: Re: Cadenas de caracteres Publicado por: satu 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
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
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 (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) Saludos Título: Re: Cadenas de caracteres Publicado por: Mr.Blue 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. Título: Re: Cadenas de caracteres Publicado por: Angel Zero 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 Título: Re: Cadenas de caracteres Publicado por: satu 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
Aquí pongo el code entero para que lo pruebes y prueba a quitar R[i+1] = '\0'; haber qué pasa... Código
Edito: se puede quitar Código si ponemos esto Código Saludos Título: Re: Cadenas de caracteres Publicado por: Angel Zero 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 Título: Re: Cadenas de caracteres Publicado por: Acermax en 4 Junio 2011, 05:21 am Veo varias cosas mal, lo primero es que recorres mal el vector. Tu haces esto.
Código
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
Despues vuelves a hacer mal la comparación Código
Finalmente debes añadir todas las posiciones al array e. Podrías hacerlo de esta manera. Código
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. Título: Re: Cadenas de caracteres Publicado por: satu 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 Título: Re: Cadenas de caracteres Publicado por: Angel Zero 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 Título: Re: Cadenas de caracteres Publicado por: Acermax 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 Debería ser así Código 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
Título: Re: Cadenas de caracteres Publicado por: Angel Zero en 4 Junio 2011, 18:38 pm Listo, muchas gracias :D, me trabajo perfectamente, yo trabajo en turbo C, pero acabo de mirar, y a la hora de pegar el codigo aca, se me trago los [] y el contenido, me paso en la parte de arriba tambien...
si tengo probelmas en las demas cosas que me toca hacer, les estare escribiendo GRACIAS :D |