Autor
|
Tema: Ayuda con arreglo char (Leído 4,131 veces)
|
Jay
Desconectado
Mensajes: 26
|
Hola amigos, tengo una duda con un arreglo char lo que pasa es que necesito que el arreglo que tengo declarada como w y quiero que se repita n veces y tengo la invetida de w 2n veces, pero esa n quiero que sea capturada por el usuario #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> char *invertir(char cadena[]) { int longitud = strlen(cadena ); char temporal; for (int izquierda = 0, derecha = longitud - 1; izquierda < (longitud / 2); izquierda++, derecha--) { temporal = cadena[izquierda]; cadena[izquierda] = cadena[derecha]; cadena[derecha] = temporal; } return cadena; } int subCadena(char *cad, char *subCad, int ini, int fin) { int iC, iS; if((ini >fin )|| (ini <0) || (fin >=strlen(cad ))) return 0; iS = 0; for (iC = ini; iC<=fin; iC++){ subCad[iS] = cad[iC]; iS++; } subCad[iS] = '\0'; return 1; } int subCadenaApellido(char *cad, char *subCad, int ini, int fin) { int iC, iS; if((ini >fin )|| (ini <0) || (fin >=strlen(cad ))) return 0; iS = 0; for (iC = ini; iC<=fin; iC+=8){ subCad[iS] = cad[iC]; iS++; } subCad[iS] = '\0'; return 1; } char *strstr(const char *haystack , const char *needle ); int main(){ char alfabeto[38]="1809669 mario alberto charles martinez",i[38], w[38],winv[38], j[38], lenguaje[34]; char cadena[37], k[37]; int n; printf("Introduce el valor de n: "); printf("Introduce la cadena a verificar: "); if(subCadena(alfabeto,i,0,6) == 0){ } if(subCadenaApellido(alfabeto,w,22,30) == 0){ } for(int i=1; i<n; ++i){ k[i] = w; } if(subCadena(alfabeto,i,0,6) == 0){ } if(subCadenaApellido(alfabeto,winv,22,30) == 0){ } if(subCadena(alfabeto,j,8,12) == 0){ } strcat(lenguaje , invertir (winv )); if (strstr(lenguaje , cadena ) != NULL ) { printf("Existe %s dentro de %s\n", cadena , lenguaje ); } else { printf("No existe %s dentro de %s\n", cadena , lenguaje ); } }
Espero me puedan ayudar, gracias
|
|
|
En línea
|
|
|
|
K-YreX
|
No entiendo muy bien tu problema...
Qué es lo que quieres repetir? Si pudieras poner un ejemplo concreto del resultado que quieres obtener igual es más fácil ayudarte.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Jay
Desconectado
Mensajes: 26
|
Hola Gracias por responder Busco que por ejemplo el arreglo w este elevado a la n, esta n introducida por el usuario, y busco que el arreglo winv este elevada ala 2n , y que esos este dentro del arreglo lenguaje ya los repetidos, no se si me entiendas ahora.
|
|
|
En línea
|
|
|
|
K-YreX
|
Me sigue costando entender lo que quieres decir... Intuyo que por "elevado a" quieres decir que su contenido esté repetido n veces, no? Sería algo así si lo entiendo bien: int main(){ char frase[] = "Hola"; int n = 3; char fraseN [strlen(frase ) * n + 1]; // Se suma 1 para el caracter final '\0' for(int i = 0; i < n; ++i){ strcat(fraseN , frase ); // Elimina el '\0', concatena la cadena e incluye otro '\0' al final } printf("%s\n", fraseN ); // Resultado: HolaHolaHola }
Si no es eso lo que estás buscando concreta más con un ejemplo de lo que tienes y lo que quieres conseguir.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Jay
Desconectado
Mensajes: 26
|
En este ejemplo bro lo que quiero es que la cadena 1809669cm1809669cmcmmariomario me diga que si existe en el arreglo lenguaje pero me dice que no existe, por que a mi me imprime caracteres especiales y no quiere funcionar no se como quitarlos puedes ayudar #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> char *invertir(char cadena[]) { int longitud = strlen(cadena ); char temporal; for (int izquierda = 0, derecha = longitud - 1; izquierda < (longitud / 2); izquierda++, derecha--) { temporal = cadena[izquierda]; cadena[izquierda] = cadena[derecha]; cadena[derecha] = temporal; } return cadena; } int subCadena(char *cad, char *subCad, int ini, int fin) { int iC, iS; if((ini >fin )|| (ini <0) || (fin >=strlen(cad ))) return 0; iS = 0; for (iC = ini; iC<=fin; iC++){ subCad[iS] = cad[iC]; iS++; } subCad[iS] = '\0'; return 1; } int subCadenaApellido(char *cad, char *subCad, int ini, int fin) { int iC, iS; if((ini >fin )|| (ini <0) || (fin >=strlen(cad ))) return 0; iS = 0; for (iC = ini; iC<=fin; iC+=8){ subCad[iS] = cad[iC]; iS++; } subCad[iS] = '\0'; return 1; } char *strstr(const char *haystack , const char *needle ); int main(){ int n; printf("Introduce el valor de n: \n"); int n2 = n*2; char alfabeto[39]="1809669 mario alberto charles martinez",i[20], w[20],winv[20], j[20], lenguaje[60]; char cadena[37]; char fraseM [strlen(winv ) * n +1]; printf("El Alfabeto es: %s\n", alfabeto ); if(subCadena(alfabeto,i,0,6) == 0){ } if(subCadenaApellido(alfabeto,w,22,30) == 0){ } if(subCadena(alfabeto,i,0,6) == 0){ } if(subCadenaApellido(alfabeto,winv,22,30) == 0){ } if(subCadena(alfabeto,j,8,12) == 0){ } printf("Introduce la cadena a verificar: \n"); for(int i = 0; i < n; ++i){ } for(int i = 0; i < n2; ++i){ } strcat(lenguaje , invertir (fraseM )); if (strstr(lenguaje , cadena ) != NULL ) { printf("\nExiste %s dentro del lenguaje", cadena ); } else { printf("\nNo existe %s dentro del lenguaje", cadena ); } }
Al final lo que quiero 1809669cm1809669cmcmmariomario es lo que quiero que me diga que existe dentro de lenguae igual si le pongo la n debe aparecer 1809669cmcm1809669cmcmcmcmmariomario y que tambien existe es lo que busco pΘu1809669ü■`cm1809669mcmc`■mmariomario a mi me imprime eso y pues me dice que no existe
|
|
|
En línea
|
|
|
|
K-YreX
|
Los problemas que tienes son los siguientes: - No inicializas las cadenas por lo que tienen basura y por eso te aparecen caracteres extraños.
En el ejemplo que te puse solo usé strcat() para que vieras su uso pero si la cadena no está inicializada hay que usar primero strcpy() para copiar el contenido y borrar la posible basura que haya y luego ya strcat(). int main(){ char frase[] = "Hola"; int n = 3; char fraseN [strlen(frase ) * n + 1]; // Se suma 1 para el caracter final '\0' strcpy(fraseN , frase ); // Copias el contenido de frase en fraseN eliminando la basura que pudiera tener for(int i = 1; i < n; ++i){ // Empiezas el contador en 1 en vez de en 0 para no concatenar el contenido una vez mas strcat(fraseN , frase ); // Elimina el '\0', concatena la cadena e incluye otro '\0' al final } printf("%s\n", fraseN ); // Resultado: HolaHolaHola }
- En las líneas 72 y 73 no puedes usar strlen() porque esto te devuelve la longitud que tiene la cadena y no tienes ninguna cadena guardada. Lo que necesitas es que te devuelva la capacidad total del array y eso se consigue con sizeof().
- En la línea 73 tienes que multiplicar por n2, no por n.
- Las líneas 89-93 son innecesarias pues estás haciendo lo mismo que en las líneas 77-81.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda en C. Unir char a char[] SOLUCIONADO
Programación C/C++
|
NeoB
|
5
|
5,671
|
10 Abril 2012, 23:07 pm
por NeoB
|
|
|
Arreglo char* en funcion
Programación C/C++
|
netca
|
1
|
2,377
|
15 Agosto 2012, 00:06 am
por тαптяα
|
|
|
(Ayuda) Error al modificar el valor de un char en una cadena const char *
Programación C/C++
|
Seyro97
|
4
|
8,386
|
2 Julio 2015, 15:17 pm
por Seyro97
|
|
|
Ayuda por favor! Con c, unsigned char y array de char !
Programación C/C++
|
Yurasamai
|
1
|
3,538
|
24 Noviembre 2015, 09:14 am
por avesudra
|
|
|
Saltar linea al dar enter al escribir un arreglo char.
Programación C/C++
|
yan.exe
|
1
|
3,319
|
3 Abril 2017, 14:35 pm
por MAFUS
|
|