[데이터 구조] 접미사 표현 식 을 이용 하여 표현 식 의 값 을 구하 십시오.
접미사 표현 식 을 접미사 표현 식 으로 바 꾸 고 값 을 구 합 니 다.
난점:
1. 숫자 와 기호의 구분 과 추출.2. 숫자 와 기호의 선형 저장 3. 실수 추출, 전환 과 처리.
4. 괄호, 음수 추출 과 처리.
데이터 구조:
변 환 된 접미사 표현 식 에는 정수, 실수, 기호 등 여러 가지 요소 가 있 기 때문에 간단 한 선형 배열 에 존재 할 수 없 기 때문에 구조 체 배열 S [N] 로 접미사 표현 식 을 저장 합 니 다. 각 구조 체 STR 에는 각각 int 변수 가 정수, float 변 량 저장 실수, char 변수 저장 기호 가 있 고 다른 int 아래 표 시 를 사용 합 니 다.
이 구조 체 에 저 장 된 것 은 기호, 정수, 실수 입 니까?
구체 적 인 실현:
처리 해 야 할 것 이 비교적 많 기 때문에 단계별 로 실현 하 는 방식 을 취한 다. 1. 비교적 간단 한 정 수 를 먼저 실현 한다.
첫 번 째 단 계 는 괄호 도 실수 도 음수 도 없 는 가장 간단 한 상황 이다.하지만 첫 번 째 단 계 는 전 체 를 완성 해 야 한다.
프로그램의 틀.
a) 우선 접미사 표현 식 의 처리 와 전환 입 니 다.
먼저 string 형식의 문자열 r1 로 숫자 를 잠시 저장 합 니 다.string 형식의 r2 를 사용 합 니 다.
기호 창고.그리고 처음부터 끝까지 스 캔 을 합 니 다.누 군 가 를 쓸 때 두 가지 상황 이 발생 합 니 다.
1) 이 자 리 는 숫자
이것 은 현재 비트 가 숫자의 일부분 임 을 나타 내 며 r1 에 눌 러 넣 습 니 다.
2) 이 자 리 는 기호
이것 은 이미 어떤 숫자 를 스 캔 하 였 음 을 나타 낸다. r1 에 처리 해 야 할 숫자 가 하나 있 는데, 이때
r1 을 정수 로 바 꾸 고 총 항 수 를 누적 하여 S 에 넣 고 태그 변 수 를 0 으로 설정 하 는 것 은 이것 이 하나의 것 임 을 나타 낸다.
숫자
이 동시에 문자 스 택 r2 에서 스 택 꼭대기 부터 우선 순위 가 현재 위치 보다 큰 기 호 를 만나면
스 택 에서 나 와 총 항목 을 누적 하고 S 에 저장 합 니 다. 태그 변 수 는 1 로 설정 되 어 있 습 니 다. 이것 은 기호 입 니 다.내 내
우선 순위 가 크 지 않 을 때 까지 창고 에 들 어 갑 니 다.
마지막 단 계 는 r1 을 초기 화하 여 새로운 숫자 를 저장 하 는 것 입 니 다.
b) 스 캔 이 끝 난 후 연산 단계 에 들어간다.
S 를 스 캔 하고 숫자 를 만나면 스 택 에 들 어가 고 기호 에 따라 스 택 에서 두 요 소 를 계산 하 며 계산 결 과 를 다시 스 택 에 들 어 갑 니 다.하나.
S 끝 날 때 까지
마지막 으로 스 택 상단 의 요 소 를 출력 합 니 다.즉 결과.
2. 실수 처리 읽 기 과정 에서 String 형식의 문자열 숫자 호 환 함수 사용 이 편리 하기 때문에 함수 로 직접 실 수 를 처리 합 니 다.1 의 판단 만 수정 하면 "."을 만 났 을 때 종료 하지 않 고 계속 누적 합 니 다. 연산 자 를 만 났 을 때 저장 할 때 태그 변 수 를 2 로 설정 하여 실 수 를 표시 합 니 다.계산 과정 에서 '%' 조작 수의 유형 은 int 로 설정 하고 '/' 조작 수의 유형 은 float 로 설정 해 야 합 니 다.3. 괄호 의 처리 와 판단 을 넣 고 읽 는 과정 에서 왼쪽 괄호 는 처리 하지 않 고 바로 창고 에 들어간다.오른쪽 괄호 를 눌 렀 을 때 왼쪽 괄호 를 만 날 때 까지 스 택 을 나 갑 니 다.계산 과정 중 에는 특별한 처리 가 필요 없다.4. 마이너스 추출 과 처 리 를 추가 합 니 다.읽 는 과정 에서 하나의 태그 변 수 를 가 져 와 서 모든 숫자 가 양수 인지 마이너스 인지 표시 합 니 다. 이 변 수 는 기본 값 은 1 이 고 정 수 를 대표 합 니 다."-"를 만나면 첫 번 째 와 다음 을 판단 합 니 다.앞 자리 가 숫자 라면 감호 로 기록 하고 앞 자리 가 숫자 가 아니라면 뒷 자리 가 숫자 라면 기호 임 을 나타 낸다.태그 변 수 를 - 1 로 설정 합 니 다.마지막 으로 한 자리 가 있 는 숫자 를 처리 할 때 결 과 를 - 1 에 곱 하고 저장 하 며 마지막 으로 태그 변 수 를 1 로 초기 화 합 니 다.계산 과정 중 에는 특별한 처리 가 필요 없다.5. 몇 가지 특수 상황 고려
a) –(a+b)
0 – (a + b) 로 변환 합 니 다.
- "먼저 창고 에 들 어가 고 마지막 에 창고 에서 나 갑 니 다."계산 할 때 창고 바닥 을 먼저 0 으로 눌 러 넣다.
b) 기타 상황
이미 4 단계 전에 고려 했다.
CODE:
#include
#include
#include
#include
#include
#define N 200
using namespace std;
typedef struct STR
{
int bj; // ,
int num; //
float flo; //
char fh; //
} ;
int su=0;
STR S[N];
// , , ( )
// , , 。
void init()
{
int cmpn[N];
cmpn[(int)'-']=1;
cmpn[(int)'+']=1;
cmpn[(int)'*']=2;
cmpn[(int)'/']=2;
cmpn[(int)'%']=2;
cmpn[(int)'^']=3;
cmpn[(int)'(']=0;
string f;
cin>>f;
string r1="",r2="";
int ii=0;
int fla=1;
int fl2=0;
for (int i=0;i='0' && f[i]<='9' )
r1+=f[i];
else if (f[i]=='.') //
{
r1+=f[i];
fl2=1;
}
else
{
//
if ( (f[i]=='-') && ( (f[i+1]>='0' && f[i+1]<='9'&&!(f[i-1]>='0' && f[i-1]<='9') )|| i==0))
{
if (f[i+1]>='0' && f[i+1]<='9')
{
fla*=-1;
continue;
}
else if (f[i+1]=='(')
{
r2[ii]=f[i];
ii++;
continue;
}
}
if (f[i-1]>='0' && f[i-1]<='9')
{
if (fl2==0)
{
int n = atoi(r1.c_str());
n*=fla;
fla=1;
cout<=cmpn[(int)ff])
{
if (ii==0)break;
cout<='0'&&f[f.length()-1]<='9')
{
if (fl2==0)
{
int n = atoi(r1.c_str());
n*=fla;
fla=1;
cout<0)
{
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
centos yum 창고 구축yum 창고 소개 yum (모두 Yellow dog Updater, Modified 라 고 함) 은 Fedora 와 RedHat 에 있 는 Shell 전단 패키지 관리자 입 니 다.RPM 패키지 관 리 를 바탕 으로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.