Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Jay en 28 Octubre 2020, 03:22 AM

Título: Ayuda con arreglo char
Publicado por: Jay en 28 Octubre 2020, 03:22 AM
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: ");
    scanf("%d", &n);

        printf("Introduce la cadena a verificar: ");
        scanf("%s", &cadena);

    if(subCadena(alfabeto,i,0,6) == 0){

        printf("Error");

    }

    if(subCadenaApellido(alfabeto,w,22,30) == 0){

        printf("Error");
    }

    for(int i=1; i<n; ++i){
        k[i] = w;
        printf("%s", k);

    }

    if(subCadena(alfabeto,i,0,6) == 0){

        printf("Error");

    }

    if(subCadenaApellido(alfabeto,winv,22,30) == 0){

        printf("Error");
    }

     if(subCadena(alfabeto,j,8,12) == 0){

        printf("Error");

    }

    strcat(lenguaje, i);
    strcat(lenguaje, w);
    strcat(lenguaje, i);
    strcat(lenguaje, invertir(winv));
    strcat(lenguaje, j);
    strcat(lenguaje, j);


    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
Título: Re: Ayuda con arreglo char
Publicado por: K-YreX en 29 Octubre 2020, 01:25 AM
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.
Título: Re: Ayuda con arreglo char
Publicado por: Jay en 29 Octubre 2020, 22:06 PM
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.
Título: Re: Ayuda con arreglo char
Publicado por: K-YreX en 30 Octubre 2020, 00:05 AM
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.
Título: Re: Ayuda con arreglo char
Publicado por: Jay en 4 Noviembre 2020, 05:11 AM

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");
    scanf("%d",&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 fraseN[strlen(w) * n+1];
    char fraseM[strlen(winv) * n+1];

    printf("El Alfabeto es: %s\n", alfabeto);

    if(subCadena(alfabeto,i,0,6) == 0){

        printf("Error");

    }

    if(subCadenaApellido(alfabeto,w,22,30) == 0){

        printf("Error");
    }


    if(subCadena(alfabeto,i,0,6) == 0){

        printf("Error");

    }

    if(subCadenaApellido(alfabeto,winv,22,30) == 0){

        printf("Error");
    }

     if(subCadena(alfabeto,j,8,12) == 0){

        printf("Error");

    }

     printf("Introduce la cadena a verificar: \n");
        scanf("%s", &cadena);


        for(int i = 0; i < n; ++i){
                strcat(fraseN, w);
            }
        for(int i = 0; i < n2; ++i){
                strcat(fraseM, w);
            }

        strcat(lenguaje, i);
        strcat(lenguaje, fraseN);
        strcat(lenguaje, i);
        strcat(lenguaje, invertir(fraseM));
        strcat(lenguaje, j);
        strcat(lenguaje, j);

        printf("\n%s", lenguaje);

        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
Título: Re: Ayuda con arreglo char
Publicado por: K-YreX en 4 Noviembre 2020, 18:45 PM
Los problemas que tienes son los siguientes: