p1958_表达式处理.cpp
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 57 行
CPP
57 行
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int Len , Ans;
char Data [1000];
int CharToInt ( int s , int t )
{
int Ret = 0;
for ( int i = s; i < t; i ++ ) if ( isupper ( Data [i] ) )
Ret |= 1 << ( Data [i] - 'A' );
return Ret;
}
int NextPos ( int s )
{
int have = 1 , i;
for ( i = s + 1; have; i ++ ) {
if ( Data [i] == '(' || Data [i] == '{' ) have ++;
if ( Data [i] == ')' || Data [i] == '}' ) have --;
}
return i;
}
void IntToChar ( int s )
{
printf ( "{" );
for ( int i = 0; i < 26; i ++ ) if ( s & ( 1 << i ) )
printf ( "%c" , i + 'A' );
printf ( "}\n" );
}
int Value ( int l , int r )
{
int Next = NextPos ( l );
if ( Next == r ) return Data [l] == '(' ? Value ( l + 1 , Next - 1 ) : CharToInt ( l + 1 , Next - 1 );
int Part = -1 , Next2;
for ( Next2 = Next; Next2 != r; Next2 = NextPos ( Next2 + 1 ) )
if ( Data [Next2] == '+' || Data [Next2] == '-' ) Part = Next2;
else if ( Part == -1 || Data [Part] == '*' ) Part = Next2;
int First = Value ( l , Part ) , Second = Value ( Part + 1 , r );
if ( Data [Part] == '+' ) return First | Second;
if ( Data [Part] == '-' ) return First & (~Second);
if ( Data [Part] == '*' ) return First & Second;
}
main ()
{
while ( gets ( Data ) ) {
int len = strlen ( Data );
IntToChar ( Value ( 0 , len ) );
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?