2010-11-21 14 views
1

içinde kodum böyle gider!dize kelime bilge nasıl yapılır (böylece daha sonra bunları tersine çevirebilirim) dizinde depolamak? C

int i=0,j=0,k=0; 
char *a[20]; 
int count=0; 
for(i=0;i<20;i++) 
    { 
     a[i] = malloc(50 * sizeof(char)); 
    } 
    i=0; 
while(*(p+i)!='\n') 
{ 
    int k=0; 
    while(*(p+i)!=' ') 
    { 
    *(a[j]+k)=*(p+i); 
    i++; 
    k++; 
    } 
    *(a[j]+k)='\0'; 
       i++; 
      j++; 
} 
printf("\n Count%d",j); 
count=j; 
for(j=0;j<count;j++) 
{ 
    printf("%s",a[j]); 
    printf("\n \n "); 
    } 
} 
+0

Özellikle strtok() 'işlevini kullanmanız yasaklandı mı? –

+0

Bir dizgiyi bir dizide depolayın: Dizeyi birden çok dizeye ayırmak yazı yazmak için daha iyi bir şeydi mi? –

+1

Yukarıdaki kodunuz, oldukça okunamaz olmasının yanı sıra, asla "p" yi tanımlamaz. Ayrıca, "sizeof (char)" gerekli değildir. –

cevap

0

Kodunuzun gerçekten çalışıp çalışmadığını belirtmezsiniz. Bir sorun mu var yoksa sadece kodunuzla ilgili yorumlar mı soruyorsunuz? 49 karakterden uzun bir kelime varsa kodunuz başarısız olur.

Dizgiler/sözcükler halinde bir dizgeyi ayırmak için strtok() kitaplık işlevini kullanabilirsiniz. strtok & daha

+1

strtok dizeyi yok eder, strtok çok-thread değil, boş kelimeler üzerinde strtok anahtar çalışır, "1; 2 ;; 4" -> "1", "2" gibi , "4" ve "1", "2", "", "4" DEĞİL – user411313

2

'Daha İyi' Co aşağıya bakın:

int strsplit(const char *s,char ***l,char t) 
{ 
    int r=0; 
    while(strchr(s,t)) 
    { 
    *l=realloc(*l,++r*sizeof*l); 
    memcpy((*l)[r-1]=calloc(1,strchr(s,t)-s+1),s,strchr(s,t)-s); 
    s=strchr(s,t)+1; 
    } 
    *l=realloc(*l,++r*sizeof*l); 
    memcpy((*l)[r-1]=calloc(1,strlen(s)+1),s,strlen(s)); 
    return r; 
} 

int main() 
{ 
    char **l=0,*x="1;2;;4"; 
    int i,r=strsplit(x,&l,';'); 
    for(i=0;i<r;++i) 
    { 
     puts(l[i]); 
     free(l[i]); 
    } 
    free(l); 
    return 0; 
} 

daha iyi dize const olabilir, bunun nedeni multithreads çalışmak, boş işler göz ardı edilmez.

İlgili konular