#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 ;
}
}
}