New file |
| | |
| | | #include "usg_common.h" |
| | | #include "usg_typedef.h" |
| | | |
| | | #define ACTION_LIDENTIFIER "<**" |
| | | #define ACTION_RIDENTIFIER "**>" |
| | | #define TOPIC_LIDENTIFIER '{' |
| | | #define TOPIC_RIDENTIFIER '}' |
| | | |
| | | int parse_pubsub_topic(char *str, char **_action, size_t *_action_len, char **_topic, size_t *_topic_len) { |
| | | char *ptr = str; |
| | | char *str_end_ptr = str + strlen(str); |
| | | char *action_start_ptr; |
| | | char *action_end_ptr; |
| | | size_t action_len = 0; |
| | | |
| | | char *topic_start_ptr; |
| | | char *topic_end_ptr; |
| | | size_t topic_len = 0; |
| | | |
| | | // if (strlen(identifier) > strlen(str)) { |
| | | // return 0; |
| | | // } |
| | | |
| | | if (strncmp(ptr, ACTION_LIDENTIFIER, strlen(ACTION_LIDENTIFIER)) == 0) { |
| | | ptr += strlen(ACTION_LIDENTIFIER); |
| | | action_start_ptr = ptr; |
| | | while(strncmp(++ptr, ACTION_RIDENTIFIER, strlen(ACTION_RIDENTIFIER)) != 0) { |
| | | if(ptr >= str_end_ptr) { |
| | | return 0; |
| | | } |
| | | } |
| | | // printf("%s\n", ptr); |
| | | action_end_ptr = ptr; |
| | | action_len = action_end_ptr - action_start_ptr; |
| | | ptr += strlen(ACTION_RIDENTIFIER); |
| | | // printf("%s\n", ptr); |
| | | // printf("%s\n", str_end_ptr-1); |
| | | if( (*ptr == TOPIC_LIDENTIFIER) && (*(str_end_ptr-1) == TOPIC_RIDENTIFIER) ) { |
| | | topic_start_ptr = ptr; |
| | | topic_end_ptr = str_end_ptr; |
| | | topic_len = topic_end_ptr - topic_start_ptr + 1; |
| | | ptr++; |
| | | // while(*(++ptr) != '}') { |
| | | // length++; |
| | | // } |
| | | } else { |
| | | return 0; |
| | | } |
| | | } else { |
| | | return 0; |
| | | } |
| | | |
| | | char *topic = (char *)calloc(1, topic_len+1); |
| | | strncpy(topic, topic_start_ptr, topic_len); |
| | | *_topic = topic; |
| | | *_topic_len = topic_len; |
| | | |
| | | char *action = (char *)calloc(1, action_len+1); |
| | | strncpy(action, action_start_ptr, action_len); |
| | | *_action = action; |
| | | *_action_len = action_len; |
| | | |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | int main() { |
| | | char *action; |
| | | size_t action_len; |
| | | char *topic; |
| | | size_t topic_len; |
| | | |
| | | char *str = "<**subsdf**>{经济}"; |
| | | if(parse_pubsub_topic(str, &action, &action_len, &topic, &topic_len)) { |
| | | printf("action:%s\n", action); |
| | | printf("topic:%s\n", topic); |
| | | free(action); |
| | | free(topic); |
| | | } else { |
| | | printf("===========error==============\n"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |