2009-06-01 3 views
1

나는 C++로 프로그램을 작성하기 위해 과제를 부여 받았지만 문자열 클래스는 사용할 수 없습니다. 그러나 문자열 스트림을 포함하여 iostream 라이브러리를 사용할 수 있습니다. 문자열을 사용하여 클래스를 빌드하고 함수에서 돌아 오는 문자열을 사용하려고 생각했습니다.문자열 대신 stringstream을 사용 하시겠습니까? - C++

이 소리가 좋은 생각 인가요? 내가 알아야 할 함정들?

+2

문자열 스트림에서 물건을 가져 오는 유일한 방법은 문자열로 변환하는 것입니다. – workmad3

+0

문자열 클래스를 사용할 수없는 이유가 무엇인지 모르기 때문에이 질문에 대답하기가 어렵습니다. 할당 대신에 문자열 대신 다른 표준 클래스를 사용하는 영리한 방법을 찾으려고 했습니까? 또는 자신 만의 문자열 클래스를 구현해야합니까? –

+0

다형성에 관한 과제입니다. 우리는 제품 목록과 쇼핑 바구니를 저장하는 상점 데이터베이스를 구축하고 있습니다. 그들은 문자열 사용을 허용하지 않음으로써 인색 해합니다. 나는 우리가 char * 또는 char 배열을 저장하는 다른 방법을 사용하기를 기대한다고 생각한다. 그러나 우리는 다른 창의적인 솔루션을 자유롭게 찾아 낼 수 있습니다. – Meir

답변

10

< 문자 >을 사용할 수도 있습니다. 문자열 대신 사용할 수있는 좋은 방법입니다. 스콧 마이어스는 자신의 "효과적인 STL"책에서 말하기를 :

셋째, 벡터에게 < 문자 > 대신 문자열의 사용을 고려, 벡터 구현은 그렇게 멀티 스레딩 성능을 숨겨, 참조 카운트가 될 수 없습니다 문제가 발생하면 이 실패합니다. 당신이 스위치 < 문자 > 벡터에 경우 물론, 당신은 문자열의 화려한 멤버 함수를 포기하지만, 의 대부분이 기능을 사용하면이 정도로 은 누구 요-그다지 기능을 포기, 어쨌든 STL 알고리즘을 통해 볼 수 있습니다 다른 하나를 위해 구문을 거래하십시오.

stringstream을 사용할 때 발생할 수있는 주요 문제는 엄격하게 컨테이너가 아니라는 것입니다. 스트림으로 알고리즘 및 기타 일반 STL 항목을 사용할 수 있는지 확실하지 않습니다.

0

상황이 문자열없는 쇼핑 데이터베이스 인 경우 열거 형을 사용하면됩니다.

즉, 정수로 전달할 수 있고 그 다음에는 switch 문이있는 인쇄 기능 만 있으면됩니다.

void PrintProd(int product) { 
    switch(product) { 
     case Prod1: 
       cout << "Product 1" << endl; 
       break; 
     case Prod2: 
       cout << "Product 2" << endl; 
       break; 
    // etc. 
    } 
} 

이렇게하면 많은 문제를 피할 수 있습니다. 힙을 다루는 것에 신경 쓰지 않는다면, id가 벡터에 대한 인덱스 인 제품 이름을 할당하는 char * 벡터도 작동합니다.

관련 문제