본문 바로가기
카테고리 없음

명품 C++ Programming 2장 실습문제 일부

by 레피스토 2024. 10. 31.
반응형

내 C++ style을 유지하고 기록하기 위해서 아카이브한다.

// 13
#include <iostream>
#include <string>

enum { 짬뽕 = 1, 짜장, 군만두, 종료 };

int main() {
  std::cout << "***** 승리장에 오신 것을 환영합니다. *****\n";

  while (true) {
    int menu{};
    std::cout << "짬뽕:1, 짜장:2, 군만두:3, 종료:4>> ";
    std::cin >> menu;
    if (menu == 종료) {
      std::cout << "오늘 영업은 끝났습니다.\n";
      break;
    }
    else if (menu > 4 || menu < 1) {
      std::cout << "다시 주문하세요!!\n";
      continue;
    }

    int num{};
    std::cout << "몇인분?";
    std::cin >> num;

    switch (menu) {
    case 짬뽕:
      std::cout << "짬뽕 " << num << "인분 나왔습니다.\n";
      break;
    case 짜장:
      std::cout << "짜장 " << num << "인분 나왔습니다.\n";
      break;
    case 군만두:
      std::cout << "군만두 " << num << "인분 나왔습니다.\n";
      break;
    default:
    }
  }
}

//14
#include <iostream>
#include <string>

int main() {
  std::cout << "에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다.\n";
  
  int sales{ 0 };

  while (sales < 20000) {
    std::cout << "주문: 커피이름>> ";
    std::string coffee{ "" };
    std::getline(std::cin, coffee);

    int num{ 0 };
    std::cout << "몇잔>>";
    std::cin >> num;
    std::cin.ignore();

    int price{ 0 };
    if (coffee == "에스프레소") {
      price = 2000 * num;
    }
    else if (coffee == "아메리카노") {
      price = 2200 * num;
    }
    else if (coffee == "카푸치노") {
      price = 2500 * num;
    }

    std::cout << price << "원입니다. 맛있게 드세요\n";
    sales += price;
  }
  
  std::cout << "오늘 " << sales << "원을 판매하여 카페를 닫습니다. 내일 봐요~~~\n";
  
}
// 15.. string을 다루는 C++에서는 여러 예외처리와 신경써야할 것들이 많다. 
// 이 문제에서는 스트림 객체에 문자열 객체를 대입해서 문자열을 스트림으로 만든 것이다.
// std::istringstream은 input string stream으로 입력 문자열 스트림
#include <iostream>
#include <string>
#include <sstream>
#include <vector>

int main() {

  while (true) {
    std::string expression{ "" };
    std::cout << "? (type exit to exit): ";
    std::getline(std::cin, expression);
    if (expression == "exit")
      break;

    std::istringstream stream{ expression };
    std::string temp{ "" };
    stream >> temp;
    int op1{ std::stoi(temp) };
    char op{};
    stream >> op;
    stream >> temp;
    int op2{ std::stoi(temp) };


    switch (op) {
    case '+':
      std::cout << op1 << " " << op << " " << op2 << " = " << op1 + op2 << '\n';
      break;
    case '-':
      std::cout << op1 << " " << op << " " << op2 << " = " << op1 - op2 << '\n';
      break;
    case '*':
      std::cout << op1 << " " << op << " " << op2 << " = " << op1 * op2 << '\n';
      break;
    case '/':
      if (op2 != 0)
        std::cout << op1 << " " << op << " " << op2 << " = " << op1 / op2 << '\n';
      else
        std::cout << "can't be divided by zero. error occoured\n";
      break;
    case '%':
      std::cout << op1 << " " << op << " " << op2 << " = " << op1 % op2 << '\n';
      break;
    default:
      std::cout << "Enter the valid expression(ex. 2 + 10)\n";
    }
    

    
  }
}
// 16. google c++ style guide에 최대한 맞추느라, 가독성 올릴려고 좀 오래걸림..
#include <iostream>
#include <string>
#include <cctype>

int main() {
  std::cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다.\n";
  std::cout << "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다.\n";

  std::string sentence{ "" };
  std::getline(std::cin, sentence, ';');
  std::string::size_type sentence_len = sentence.length();

  if (sentence_len == 0)
    return 1;

  int alphabet_set[26]{ 0 };
  int alphabet_set_len{ 26 };
  int alphabet_count{ 0 };

  for (int i = 0; i < sentence_len; i++) {
    sentence[i] = std::tolower(sentence[i]);
    if (sentence[i] >= 'a' && sentence[i] <= 'z') {
      alphabet_set[sentence[i] - 'a']++;
      alphabet_count++;
    }
  }

  std::cout << "총 알파벳 수 " << alphabet_count << "\n\n";

  for (int i = 0; i < alphabet_set_len; i++) {
    std::cout << static_cast<char>((i + 'a')) << " (" << alphabet_set[i] << ")\t: ";

    for (int j = 0; j < alphabet_set[i]; j++)
      std::cout << "*";
    std::cout << '\n';
  }

}
반응형

댓글