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
CitarR[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
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 cadena
R[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 esto (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)
Saludos
CitarR[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.
CitarCadana:
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.
CitarSalida:
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.
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...
Citarprintf("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
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("MENU STRING\n");
printf("DIGITE EL STRING: ");
scanf("%s", R);
printf("Posicion caracter a insertar: ");
scanf("%d",&P);
while(getchar()!='\n') ;
printf("Caracter a insertar: ");
scanf("%c", &T);
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
printf("%s", R);
while(getchar()!='\n') ;
return 0;
}
Edito: se puede quitar R[i+1] = '\0';
si ponemos esto i = strlen(R)+1;
Saludos
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
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.
Cita de: Angel Zero en 3 Junio 2011, 23:35 PM
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
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
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++)
{
printf("%d ", e[j]);
}
Debería ser así
for(j=0; j<M; j++)
{
printf("%d ", e[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])
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