1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Separar string em C

Discussão em 'Programação' iniciada por marcotabuas, 13 de Janeiro de 2008. (Respostas: 3; Visualizações: 6049)

  1. marcotabuas

    marcotabuas Power Member

    hey,
    Tenho um problema com este programa que não consigo detectar. O objectivo é que o programa separe as palavras que estão dentro da string para por em um array de 2 dimensões.

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    main()
    {
    int x,y,z[4][30];
    char nomes[30];

    printf("Escreva os nomes\n");
    gets(nomes);

    for (x=0;nomes[x]!='\0';x++)
    {
    for (y=0;nomes[x] !=' ';y++)
    z[x][y]=nomes[y];
    }
    printf("%s",nomes [3]); ( esta linha é só por curiosidade.. pk é que não funciona)
    }
     
  2. Baderous

    Baderous Banido

    1 - Não uses gets, usa antes fgets.
    2 - for (y=0;nomes[y] !=' ';y++)
     
  3. marcotabuas

    marcotabuas Power Member

    obrigado pela dica.
    a escrita do fgets é char *fgets(char *s,int n,FILE *fich) neste caso não se aplica muito... acho eu:(

    A minha ideia é ele guardar por exemplo antonio jose maria , na string nomes tipo:
    nomes[50]={'a','n','t','o','n','i','o',' ','j'.......}
    e depois com os for fazia com que na leitura da string nomes, fosse guardando as letras em
    z[][], tipo 'a'= z[0][0] , ía guardar o primeiro nome na primeira linha até encontrar o espaço e depois guardar na 2ªlinha até acabar a string nomes com [\0].

    Espero ter explicado bem o pretendido.
     
  4. alph

    alph Power Member

    Visto que o array é feito da seguinte maneira:

    Código:
    nomes[50]={'a','n','t','o','n','i','o',' ','j','o','s','e',' ','m','a','r','i','a','\0'}
    
    O que tu podes fazer é:
    Código:
    int i,x;
    char *z[4]; // supondo que só queres 4 nomes, é uma array de strings
    
    x = i = 0;
    z[i++] = nomes; // z[0] aponta para o primeiro nome
    
    while (nomes[x]!='\0')
    {
      if (nomes[x] == ' ')
      {
        nomes[x++] = '\0'; // substitui o espaço por '\0'
        z[i++] = nomes[x]; // próximo nome fica a apontar para o sítio correcto
      }
      else
      {
        x++;
      }
    }
    
    No final disto não precisaste de replicar memória nenhuma. Ficas com a tua array nomes à mesma, apenas com os espaços substituídos por '\0' e com a array z a apontar para cada nome dentro de nomes.

    Espero que tenhas percebido.
     

Partilhar esta Página