Separar string em C

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)
}
 
1 - Não uses gets, usa antes fgets.
2 - for (y=0;nomes[y] !=' ';y++)

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.
 
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.
 
Back
Topo