Autor
|
Tema: Cadenas de caracteres (Leído 9,073 veces)
|
Angel Zero
Desconectado
Mensajes: 92
ZERO
|
jejeje, volvi , con otro problemas... #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 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
|
|
|
En línea
|
Zero
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola Para hacer lo que pides debes recorrer la cadena desde el final hasta la posición que quieres y luego insertas. Un ejemplo: int main() { ....... ....... int i; i = strlen(R ); // almacena en i la longitud de la cadenaR[i+1] = '\0'; // finalizamos la cadena for(; i>P; i--) // vamos recorriendo la cadena de atrás hacia delante R[i] = R[i-1]; R[i] = T; // insertamos el nuevo caracter .......... .......... return 0; }
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: for(i=P; i<strlen(R); i++) R[i] = R[i+1];
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 estoSaludos
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Mr.Blue
|
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. 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. 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
Mensajes: 92
ZERO
|
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. #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... 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
|
|
« Última modificación: 3 Junio 2011, 21:47 pm por Angel Zero »
|
En línea
|
Zero
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
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 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... #include<string.h> #include<stdio.h> int main () { char R[40], T; int P, i; printf("Posicion caracter a insertar: "); printf("Caracter a insertar: "); i = strlen(R ); // almacena en i la longitud de la cadena R[i+1] = '\0'; // finalizamos la cadena for(; i>P-1; i--) // vamos recorriendo la cadena de atrás hacia delante R[i] = R[i-1]; R[i] = T; // insertamos el nuevo caracter return 0; }
Edito: se puede quitar R[i+1] = '\0';
si ponemos esto
Saludos
|
|
« Última modificación: 3 Junio 2011, 22:15 pm por satu »
|
En línea
|
Breakbeat como forma de vida
|
|
|
Angel Zero
Desconectado
Mensajes: 92
ZERO
|
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 #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
|
|
« Última modificación: 4 Junio 2011, 00:45 am por Angel Zero »
|
En línea
|
Zero
|
|
|
Acermax
Desconectado
Mensajes: 55
|
Veo varias cosas mal, lo primero es que recorres mal el vector. Tu haces esto. i = strlen(R); for(;i=0;i++) { if (T=R) { M++; e=i; }
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. for (int i=0;i<strlen(R);i++) o bien for (int i=strlen(R);i>=0;i--)
Despues vuelves a hacer mal la comparación if (T=R) La comparación es '==', y además tienes que compararlo caracter a caracter if (T==R[i])
Finalmente debes añadir todas las posiciones al array e. Podrías hacerlo de esta manera. e[M]=i; M++;
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
Mensajes: 301
Siempre aprendiendo
|
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
Mensajes: 92
ZERO
|
Listo, todo muy lindo, me imprime la cantidad y las posiciones, pero en las posiciones me esta imprimiendo un valor de mas #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
|
|
|
En línea
|
Zero
|
|
|
Acermax
Desconectado
Mensajes: 55
|
A la hora de imprimir el resultado te estás pasando en el recorrido del array Esto tienes tú. for(j=0; j<=M; j++) { }
Debería ser así for(j=0; j<M; j++) { }
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 if (T==R) debería ser if (T==R[i])
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cadenas de caracteres solucionado
Programación General
|
malocha
|
0
|
1,864
|
18 Julio 2011, 00:18 am
por malocha
|
|
|
Cambiar caracteres en cadenas --en C--
Programación C/C++
|
n_n
|
9
|
9,795
|
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
|
7,097
|
11 Noviembre 2011, 01:28 am
por Principios en C
|
|
|
Cadenas de caracteres
Programación C/C++
|
carmelina
|
2
|
2,366
|
7 Mayo 2012, 03:46 am
por andres_5
|
|
|
Cadenas de caracteres con punteros
Programación C/C++
|
pedroedlp
|
4
|
2,277
|
12 Abril 2014, 17:25 pm
por rir3760
|
|