2014-11-07 3 views
2

사용자가 스트림 버퍼에 문자의 줄을 입력 한 다음 다른 유형의 다른 변수에 저장하는 방법이 있습니까? 에,스트림 버퍼 (cin, getline 등)

int numerator1, denominator1, numerator2, denominator2; char operat; 

내가 모르는 코드의 멋진 조각을하고 후 :

1/5 + 2/7 

내가 5 개 변수가 있습니다

예를 들어

, 사용자는 분수의 합을 기록 끝, 변수는 다음을 저장합니다

numerator1 = 1 
denominator1 = 5 
operat = + 
numerator2 = 2 
denominator2 = 7 

어떤 제안이 있습니까?

+1

더 일반적으로 만들고 자유로운 공식으로 작업하고 싶을 수도 있습니다. 션팅 야드 알고리즘을 찾으십시오. – Deduplicator

답변

0

오류를 구문 분석하는 데 도움이되므로 반드시 AST를 사용해야합니다. 그러나 간단한 파싱 기능을 찾고 있다면 sscanf를 사용해보십시오. 추신 : 평판 문제로 인해 답변으로 게시.

#include<cstring>                  
#include<cstdio>                   
#include<iostream>                  
using namespace std;                  

int main()                    
{                      
    char s[1024];                 
    scanf("%s", s);                 

    int n1, n2, dn1, dn2;               
    char op1, op2, op3;                
    sscanf(s, "%d%c%d%c%d%c%d", &n1, &op1, &dn1, &op2, &n2, &op3, &dn2);    

    cout<<"\n"<<n1<<" "<<op1<<" "<<dn1<<" "<<op2<<" "<<n2<<" "<<op3<<" "<<dn2<<endl; 
} 
+0

백분율 기호의 의미는 무엇입니까? – Sirallens

+0

그들은 C에서 형식 지정자, 문자열에 대해 % s, char에 대해 % c 등입니다. –

0

글쎄,이 기능을 달성하기 위해 특정 알고리즘을 잘 모르겠지만, 나는 다음을 제안 할 수 있습니다.

여러 변수를 사용하는 대신 정수 배열과 문자 배열을 사용하십시오. 사용자의 입력을 문자열로 가져옵니다.

  • 문자열을 반복하고 다음을 수행하십시오. (- * + /)

    그것의 서브 찌르기를 추출하고 상기 int 배열에 저장

    경우, 현재의 인덱스의 값은 공간 또는 운영자를 찾는 까지 NUM 반복, 카운터 인 해당 색인.

    인덱스의 값이 연산자 인 경우 문자 배열에 저장하십시오.