2012-10-25 29 views
8

Bir dizeyi belirteçlere bölmek için strtok kullanıyorum. Aslında, jeton sayısını sayan herhangi bir işlev biliyor mu?C harflerini saymanın bir yolu var mı?

Komut dizim var ve onu bölmeli ve argümanları execve()'a iletmem gerekiyor.

Teşekkürler!

Düzenleme

execvechar** olarak argüman alır, bu yüzden işaretçiler bir dizi tahsis etmek gerekir. Kaç tane jeton olduğunu bilmeden kaç tane tahsis edeceğimi bilmiyorum.

+9

'strtok aynı olacaktır '' olduğu) 've bir sayacı artırır? – alex

+1

Ve 'realloc' boyutunu önceden bilmeme problemini çözmeli. –

cevap

8

Bir yaklaşım, bir sayaçla strtok kullanmanızdır. Ancak, bu orijinal dizeyi değiştirir.

diğer yaklaşım şöyle bir döngü içinde strchr kullanmaktır:, birden ayraçları varsa

int count = 0; 
char *ptr = s; 
while((ptr = strchr(ptr, ' ')) != NULL) { 
    count++; 
    ptr++; 
} 

kullanmak strpbrk:

jeton sayısı arttıkça
while((ptr = strpbrk(ptr, " \t")) != NULL) ... 
+0

strchr() birden fazla alan sınırlayıcısı olduğunda, örneğin noktalama işaretleri olduğunda hantal hale gelir. –

+0

Bu durumda strpbrk'ü kullanabilirsiniz. – nneonneo

+0

Doğru - sadece strchr() değil; –

3

bir fazlasının başka bir şey değildir kullanılan sınırlayıcı oluşum sıklığı. Yani sorunun, hayır bulmak için aşağı doğru kayıyor. bir karakterin bir karakter oluşum kez

ki c strtok işlevi kullanılan ayraç (jeton

int count =0,i; 
char str[20] = "some string here"; 

for(i=0;i<strlen(str);i++){ 
    if(str[i] == ' ') 
     count++; 
} 

sayılı sayısı + 1

+0

Birden fazla sınırlayıcının izin vermesi durumunda iş zorlaşıyor mu? –

+0

Sanırım aynı prosedürü kullanabiliriz ve köşe durumlarına dikkat etmeliyiz – router