#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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;
}
int isLegalBegin(char a) {
if (a >= 'a' && a <= 'z') {
return 1;
}
if (a >= 'A' && a <= 'Z') {
return 1;
}
if (a == '_') {
return 1;
}
return 0;
}
int main() {
char string[110];
int string_len = 0;
gets(string);
string_len = strlen(string);
if (string_len == 0) {
return 0;
}
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';
char tmp[110];
int cnt = 0;
char var[100];
int var_len = 0;
for (i = 0; i <string_len; i++) {
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;
}
相关文章链接
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Node {
int val;
int cnt;
struct Node* child[10];
struct Node* parent;
};
typedef struct Node* NODE;
struct custom {
char name[110];
int pri;
int gate;
};
struct custom array[1000];
int array_len = 0;
int visit[1000];
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;
}
}
}
NODE findNode(NODE root, int 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;
}
NODE path[100];
int path_len = 0;
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];
}
}
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);
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;
}
}
}