2012-10-25 36 views
8

Tôi đang sử dụng strtok để chia chuỗi thành mã thông báo. Có ai biết bất kỳ chức năng mà thực sự đếm số lượng thẻ?Có cách nào để đếm số thẻ trong C?

Tôi có chuỗi lệnh và tôi cần chia chuỗi và chuyển đối số đến execve().

Cảm ơn!

Sửa

execve mất lập luận như char**, vì vậy tôi cần phải phân bổ một mảng của con trỏ. Tôi không biết có bao nhiêu để phân bổ mà không biết có bao nhiêu thẻ.

+9

'strtok () 'và tăng truy cập? – alex

+1

Và 'realloc' sẽ giải quyết vấn đề không biết kích thước trước. –

Trả lời

8

Một cách tiếp cận sẽ đơn giản là sử dụng strtok với bộ đếm. Tuy nhiên, điều đó sẽ sửa đổi chuỗi gốc.

phương pháp khác là sử dụng strchr trong một vòng lặp, như vậy:

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

Nếu bạn có nhiều delimiters, sử dụng strpbrk:

while((ptr = strpbrk(ptr, " \t")) != NULL) ... 
+0

strchr() trở nên cồng kềnh khi có nhiều dấu phân cách trường, ví dụ dấu chấm câu. –

+0

Bạn có thể sử dụng 'strpbrk' trong trường hợp đó. – nneonneo

+0

Đúng - không phải strchr(); –

3

Là số thẻ là gì, nhưng một hơn tần suất xuất hiện của dấu phân cách được sử dụng. Vì vậy, câu hỏi của bạn sôi xuống để tìm không. lần xuất hiện của một nhân vật trong một chuỗi

nói delimiter sử dụng trong chức năng strtok trong c là ''

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

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

Số thẻ sẽ được giống như đếm + 1

+0

Có phải công việc nhưng bị cồng kềnh nếu có nhiều hơn một dấu phân tách được cho phép hay không. –

+0

Tôi đoán chúng ta có thể sử dụng thủ tục tương tự và nên chăm sóc các trường hợp góc – router

Các vấn đề liên quan