2021-03-04



#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//judge legal char
int isLegal(char a) {
    if (a >= 'a' && a <= 'z') {
        return 1;
    }
    if (a >= 'A' && a <= 'Z') {
        return 1;
    }
    if (a == '_' || (a >= '0' && a <= '9')) {
        return 1;
    }
    return 0;
}

//judge legal function begin
int isLegalBegin(char a) {
    if (a >= 'a' && a <= 'z') {
        return 1;
    }
    if (a >= 'A' && a <= 'Z') {
        return 1;
    }
    if (a == '_') {
        return 1;
    }
    return 0;
}

// main
int main() {
    char string[110];
    int string_len = 0;
    gets(string);
    string_len = strlen(string);
    if (string_len == 0) {
        return 0;
    }

    //printf("%s\n", string);

    int i, j;
    for (i = 0; i < string_len; i++) {
        if (string[i] == ' ' || string[i] == '\t') {
            for (j = i; j < string_len - 1; j++) {
                string[j] = string[j + 1];
            }
            string_len--;
            i--;
        }
    }
    string[string_len] = '\0';

    //printf("%s\n", string);

    char tmp[110];
    int cnt = 0;

    char var[100];
    int var_len = 0;
    for (i = 0; i <string_len; i++) {
        //tmp[cnt] = '\0';
        //printf("%s\n", tmp);
        if (string[i] == '(' && cnt > 0) {
            tmp[cnt] = '\0';
            printf("%s", tmp);
            cnt = 0;
            var_len = 0;
            i += 1;
            while (string[i] != ')') {
                if (string[i] == ',') {
                    if (var_len > 0) {
                        var[var_len] = '\0';
                        printf(" %s", var);
                    }
                    var_len = 0;
                } else {
                    var[var_len++] = string[i];
                }
                i += 1;
            }
            if (var_len > 0) {
                var[var_len] = '\0';
                printf(" %s", var);
            }
            printf("\n");
        } else if (cnt == 0 && isLegalBegin(string[i])) {
            tmp[cnt++] = string[i];
        }  else if (isLegal(string[i]) == 0) {
            cnt = 0;
        } else {
            tmp[cnt++] = string[i];
        }
    }

    return 0;
}
/*
a = function(1, 2 + 3, d) + functio() + functi( 1+ b+ d);

function 1 2+3 d
functio
functi 1+b+d
*/

相关文章链接

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//struct for multi tree node
struct Node {
    int val;
    int cnt;
    struct Node* child[10];
    struct Node* parent;
};

typedef struct Node* NODE;

//struct for customer
struct custom {
    char name[110];
    int pri;
    int gate;
};

//array for all customers
struct custom array[1000];
int array_len = 0;

//a symbol of if visit
int visit[1000];

//selective sort for struct cunstom
void sort() {
    int i,j;
    int pos;
    char temp[110];
    int a, b;
    for (i = 0; i < array_len; i++) {
        pos = i;
        for (j = i; j < array_len; j++) {
            if (array[j].pri < array[pos].pri) {
                pos = j;
            }
        }
        if (pos != i) {
            strcpy(temp, array[pos].name);
            a = array[pos].gate;
            b = array[pos].pri;
            
            strcpy(array[pos].name, array[i].name);
            array[pos].gate = array[i].gate;
            array[pos].pri = array[i].pri;
            
            strcpy(array[i].name, temp);
            array[i].gate = a;
            array[i].pri = b;
        }
    }
}

//find node according to val
NODE findNode(NODE root, int val) {
    // printf("%d\n", val);
    if (root == NULL || root->val == val) {
        return root;
    }
    
    if (root->cnt == 0) {
        return NULL;
    }
    
    NODE temp;
    
    int i;
    for (i = 0; i < root->cnt; i++) {
        temp = findNode(root->child[i], val);
        if (temp != NULL) {
            return temp;
        }
    }
    return NULL;
}

// record visit path
NODE path[100];
int path_len = 0;

//is similar to preorder
void findPath(NODE dst) {
    NODE path1[100];
    
    NODE temp = dst;
    while (temp-> parent != NULL) {
        temp = temp->parent;
        path1[path_len++] = temp;
    }
    
    int i;
    for (i = 0; i < path_len; i++) {
        path[i] = path1[path_len - 1 - i];
    }
}

//judge if visit
void stop(NODE temp) {
    int i, j;
    for (j = 0; j < array_len; j++) {
        if (visit[j] == 1) {
            continue;
        }
        for (i = 0; i < temp->cnt; i++) {
            if (temp->child[i]->val < 100 && array[j].gate == temp->child[i]->val) {
                printf("%s %d\n", array[j].name, array[j].gate);
                visit[j] = 1;
                break;
            }
        }
    }
}


int main() {
    int n;
    scanf("%d", &n);
    
    NODE root = (NODE) malloc(sizeof(struct Node));
    
    int a, b;
    NODE temp;

    int i;
    for (i = 0; i < n; i++) {
        scanf("%d%d", &a, &b);
        // printf("insert %d %d\n", a, b);
        if (i == 0) {
            root->val = a;
            root->cnt = 0;
            root->parent = NULL;
            continue;
        }
        temp = findNode(root, b);
        temp->child[temp->cnt] = (NODE) malloc(sizeof(struct Node));
        temp->child[temp->cnt]->val = a;
        temp->child[temp->cnt]->parent = temp;
        temp->child[temp->cnt]->cnt = 0;
        temp->cnt += 1;
    }

    int m;
    scanf("%d", &m);
    char name[101];
    int gate;
    int pri;
    for (i = 0; i < m; i++) {
        scanf("%s%d%d", name, &gate, &pri);
        strcpy(array[array_len].name, name);
        array[array_len].gate = gate;
        array[array_len].pri = pri;
        array_len++;
    }
    
    sort();
    for (i = 0; i < array_len; i++) {
        visit[i] = 0;
    }
    int j;
    for (i = 0; i < array_len; i++) {
        if (visit[i] == 0) {
            temp = findNode(root, array[i].gate);
            findPath(temp);
            for (j = 0; j < path_len; j++) {
                stop(path[j]);
            }
            visit[i] = 1;
            path_len = 0;
        }
    }
    
}

/*
10
100 0
101 100
3 100
1 101
2 101
102 100
103 102
4 102
5 102
6 103
4
thunder1 6 1
thunder2 3 2
thunder3 2 0
thunder4 4 3


thunder2 3
thunder3 2
thunder4 4
thunder1 6
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值