Làm cách nào để chia chuỗi thành mã thông báo theo số '&'
trong C?Làm thế nào để tách một chuỗi thành các thẻ trong C?
Trả lời
char *token;
char *state;
for (token = strtok_r(input, "&", &state);
token != NULL;
token = strtok_r(NULL, "&", &state))
{
...
}
tôi sẽ làm điều đó một cái gì đó như thế này (sử dụng strchr()
):
#include <string.h>
char *data = "this&&that&other";
char *next;
char *curr = data;
while ((next = strchr(curr, '&')) != NULL) {
/* process curr to next-1 */
curr = next + 1;
}
/* process the remaining string (the last token) */
strchr(const char *s, int c)
trả về một con trỏ đến vị trí tiếp theo của c
trong s
, hoặc NULL
nếu c
isn' t được tìm thấy trong s
.
Bạn có thể có thể sử dụng strtok()
, tuy nhiên, tôi không thích strtok()
, bởi vì:
- nó đổi các chuỗi được tokenized, vì vậy nó không làm việc cho chuỗi chữ, hoặc không phải là rất hữu ích khi bạn muốn giữ chuỗi cho các mục đích khác. Trong trường hợp đó, trước tiên bạn phải sao chép chuỗi này thành chuỗi.
- nó hợp nhất các dấu phân cách liền kề, vì vậy nếu chuỗi của bạn là
"a&&b&c"
, mã thông báo trả lại là"a"
,"b"
và"c"
. Lưu ý rằng không có mã thông báo trống nào sau"a"
. - không an toàn.
Tôi cho rằng nó cũng phụ thuộc vào việc triển khai C. Trên hệ thống của tôi, chuỗi ký tự không được sửa đổi khi tôi gọi strtok(). Thực ra tôi thậm chí không thấy nó có thể như thế nào. Sau khi tất cả nó chỉ có để sản xuất con trỏ đến sự bắt đầu của các thẻ khác nhau trong chuỗi. –
Cees Meijer: 'strtok()' * không * sửa đổi chuỗi đối số - các ký tự dấu phân cách được thay thế bằng '\ 0', để các chuỗi được trả lại được kết thúc đúng cách. – caf
'strtok' * có * để sửa đổi chuỗi nếu nó phải tuân thủ các tiêu chuẩn. Từ tiêu chuẩn C: * Nếu tìm thấy một ký tự như vậy, ký tự đó sẽ bị ghi đè bởi một ký tự null, kết thúc mã thông báo hiện tại *. Điều này rất rõ ràng. http://opengroup.org/onlinepubs/009695399/functions/strtok.html. Bạn có thể gửi mã nơi 'strtok()' không sửa đổi chuỗi? –
Bạn có thể sử dụng hàm strok() như minh họa trong ví dụ bên dưới.
/// Function to parse a string in separate tokens
int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter,
char *pToken[MAX_TOKENS])
{
int i;
i = 0;
pToken[i] = strtok(pInputString, Delimiter);
i++;
while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){
i++;
}
return i;
}
/// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string.
sprintf(String,"Token1&Token2");
NrOfParameters = parse_string(String,"&",pTokens);
sprintf("%s, %s",pToken[0],pToken[1]);
- 1. Làm thế nào để tách một chuỗi được phân tách thành một mảng trong awk?
- 2. Làm thế nào để tách một chuỗi thành các chuỗi có chiều dài nhất định?
- 3. C++: tách một chuỗi thành một mảng
- 4. Làm thế nào để tách một chuỗi trong Python?
- 5. Làm thế nào để tách một chuỗi CamelCase trong các chuỗi của nó trong Ruby?
- 6. Tách một chuỗi thành các cặp
- 7. Làm thế nào để tách một chuỗi theo vị từ?
- 8. Làm thế nào để tách một chuỗi thành một danh sách?
- 9. Làm thế nào để tách một mảng?
- 10. Trong Python, làm cách nào để tách một chuỗi và giữ các dấu tách?
- 11. Làm thế nào để tách một chuỗi với angularJS
- 12. tách một chuỗi dài thành chuỗi nhỏ
- 13. Làm cách nào để tách chuỗi thành nhiều mảng?
- 14. Tách một chuỗi thành 2 trong Python
- 15. Làm thế nào để tách một mảng thành một nhóm các phần tử n?
- 16. Tách chuỗi thành các từ
- 17. Làm thế nào để tách chuỗi thành chuỗi 2D với Regex?
- 18. Làm thế nào để bạn chuyển đổi một chuỗi thành ascii thành nhị phân trong C#?
- 19. Tách một chuỗi thành một bộ lặp
- 20. Làm thế nào để tách một chuỗi và gán nó cho các biến trong Golang?
- 21. Làm thế nào để chuyển đổi một chuỗi phân tách bằng dấu phẩy thành một mảng các số nguyên?
- 22. Làm thế nào để tách chuỗi này bằng python?
- 23. Tách một chuỗi thành các từ và dấu chấm câu
- 24. Làm cách nào để tách các chuỗi trong J2ME?
- 25. Làm thế nào để tách một chuỗi cung cấp một danh sách các vị trí trong Scala
- 26. Cách tách nội dung chuỗi thành một chuỗi các chuỗi trong PowerShell?
- 27. Làm thế nào tôi có thể chia chuỗi bằng dấu phân tách thành một mảng?
- 28. Làm thế nào để tách một chuỗi hai lần với các dấu tách khác nhau bằng cách sử dụng LINQ?
- 29. Làm thế nào để chuyển đổi NSString thành chuỗi C?
- 30. Làm cách nào để tách một chuỗi trong CSH?
http://stackoverflow.com/questions/266357/tokenizing-strings-in-c –
Hình như câu hỏi đó là việc phải tách nhỏ một chuỗi chữ (mặc dù câu hỏi là thấp trên chi tiết, nói rằng "không công việc"). Điều này có thể hoặc không phải là những gì OP muốn. Chúng ta nên cho anh ta một cơ hội để giải thích điều đó. Chuỗi có bị chia nhỏ một chuỗi ký tự hay là chỉ đọc? –