๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿฐ42์„œ์šธ/CPP_Module

CPP_Module_00

CPP module 00

ex00

cpp์˜ ์ž…์ถœ๋ ฅ์€ iostream ์„ ์‚ฌ์šฉํ•œ๋‹ค!

๊ฐ์ฒด์ง€ํ–ฅ์ธ cpp๋Š” stdio ๋ณด๋‹ค ๊ฐ์ฒด์ง€ํ–ฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ iostream์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.

<<, >>์— ๋Œ€์ž…ํ• ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด ๋” ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ! ๊ฐ์ฒด๋‚˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ๋” ํŽธํ•  ๊ฒƒ์ด๋‹น๋‹น~

  • Makefile์— CC CFLAGS๊ฐ€ ์•„๋‹Œ CXX CXXFLAGS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
    • Makefile์˜ OBJS์—์„œ .c:.o์˜ ๊ทœ์น™์„ ๋”ฐ๋กœ ์ •ํ•˜์ง€ ์•Š๊ณ  OBJS = $(SRCS:.cpp=.o) ๋กœ ํ–ˆ์„ ๋•Œ ! ์ปดํŒŒ์ผ ์˜ต์…˜์ด ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€์ง€ ์•Š์Œ!!!
      NAME = phonebook
      SRCS = main.cpp Contact.cpp PhoneBook.cpp
      OBJS = $(SRCS:.cpp=.o)
      CXXFLAGS = -Wall -Wextra -Werror -std=c++98
      CXX = c++
      
      #############ํ„ฐ๋ฏธ๋„ ๊ฒฐ๊ณผ###############
      jiyokim@c4r3s3 ex01 % make
      c++ -Wall -Wextra -Werror -std=c++98   -c -o main.o main.cpp
      c++ -Wall -Wextra -Werror -std=c++98   -c -o Contact.o Contact.cpp
      c++ -Wall -Wextra -Werror -std=c++98   -c -o PhoneBook.o PhoneBook.cpp
      c++ -Wall -Wextra -Werror -std=c++98 main.o Contact.o PhoneBook.o -o phonebook
      .c:.o ์˜ ๊ทœ์น™์„ ์ง€์ •ํ•ด๋†จ๋‹ค๋ฉด ์ƒ๊ด€์—†์ง€๋งŒ cxx cxxflags๊ฐ€ ๊ตญ๋ฃฐ์ธ ๋А๋‚Œโ€ฆ?
    • NAME = phonebook SRCS = main.cpp Contact.cpp PhoneBook.cpp OBJS = $(SRCS:.cpp=.o) CFLAGS = -Wall -Wextra -Werror -std=c++98 CC = c++ #############ํ„ฐ๋ฏธ๋„ ๊ฒฐ๊ณผ################# jiyokim@c4r3s3 ex01 % make c++ -c -o main.o main.cpp # ๋ชฉ์  ํŒŒ์ผ์„ ๋งŒ๋“ค ๋•Œ CFLAGS์˜ ์˜ต์…˜๋“ค์ด ๋“ค์–ด๊ฐ€์ง€์ง€ ์•Š์Œ c++ -c -o Contact.o Contact.cpp c++ -c -o PhoneBook.o PhoneBook.cpp c++ -Wall -Wextra -Werror -std=c++98 main.o Contact.o PhoneBook.o -o phonebook

ex00 ํ‰๊ฐ€ํ‘œ์˜ ํ•ญ๋ชฉ์— string/toupper ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š”๋ง์ด ์žˆ์Œโ€ฆ ์•„๋‹ˆ ์ด๋Ÿด๊ฑฐ๋ฉด subject์— ์“ฐ๋ผ๊ตฌ์šฐ์šฐโ€ฆ! ํ•˜์ง€๋งŒ ์ ˆ๋ฐ•ํ•œ ๋””ํŽœ์Šค๋กœ ํ†ต๊ณผ!

ex01

PhoneBook ๋งŒ๋“ค๊ธฐ~~

  • add, search, exit ๊ธฐ๋Šฅ
    • add : ์ƒˆ contact ์ €์žฅ, ํ•œ์ค„์— ํ•œ ํ•„๋“œ์”ฉ ์ž…๋ ฅ๋ฐ›๊ธฐ, empty field๊ฐ€ ์žˆ์–ด์„  ์•ˆ๋จ
    • search
      • 4๊ฐœ์˜ ์—ด(index, firstname, lastname, nickname)๋กœ ์ถœ๋ ฅ
      • ๊ฐ ์—ด์˜ ์นธ์€ 10์นธ, โ€˜|โ€™๋กœ ๋‚˜๋‰˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
      • prompt๋Š” index๋ฅผ ๋‹ค์‹œ ๋ฌผ์–ด๋ณด๊ณ  ํ•ด๋‹น contact๋ฅผ ํ•œ ํ•„๋“œ์— ํ•œ ์ค„์”ฉ ์ถœ๋ ฅํ•ด์คŒ. index๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ๊ด€๋ จ ํ–‰๋™์„ ์ •์˜ํ•˜์‹œ์˜ค.
    • exit : ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ. contact๋Š” ์˜์˜ ์‚ฌ๋ผ์ง โ€ฆ~
    • ๋‹ค๋ฅธ input์€ ๋ชจ๋‘ ๋ฌด์‹œ
  • std::cin vs std::cin.getline() vs std::getline()
    • std::cin , std::cin.getline()
      1. cin์€ ์—ฌ๋Ÿฌ ์ž๋ฃŒํ˜• ๋ฐ›๊ธฐ ๊ฐ€๋Šฅ, cin.getline์€ ๋ฌธ์ž์—ด๋งŒ ๋ฐ›๊ณ  ์ข…๊ฒฐ ๋ฌธ์ž๋ฅผ โ€˜\0โ€™๋กœ ๋ฐ”๊ฟˆ
      2. cin์€ ๊ณต๋ฐฑ์ด ๋“ค์–ด์˜ค๋ฉด ์ž…๋ ฅ์ด ๋๋‚œ ์ค„ ์•Œ์ง€๋งŒ cin.getline์€ ๊ณต๋ฐฑ๋„ ๋ฌธ์ž๋กœ์„œ ๋ฐ›์•„๋“ค์ž„
      3. cin.getline(๋ณ€์ˆ˜์˜ ์ฃผ์†Œ, ์ตœ๋Œ€์ž…๋ ฅ๊ฐ€๋Šฅ ๋ฌธ์ž์ˆ˜, ์ข…๊ฒฐ๋ฌธ์ž) ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š” ์„ธ๊ฐ€์ง€๋ฅผ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Œ, ์ข…๊ฒฐ๋ฌธ์ž ์ƒ๋žต์‹œ ๋””ํดํŠธ์ธ ์—”ํ„ฐ๋กœ ๊ฐ„์ฃผ
    • std::getline() ๋ž‘ std::cin.getline()
      1. ๊ธฐ๋ณธ ํ˜•ํƒœ getline(cin, str);
      2. cin.getline()์€ istream์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜, std::getline()์€ ์ผ๋ฐ˜ํ•จ์ˆ˜
      3. cin.getline()์€ ์ž…๋ ฅ๊ฐ’์„ char* ํ˜•์— ์ €์žฅ, getline()์€ string์— ์ €์žฅ
    • PhoneBook์—์„œ๋Š” string์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ std::getline() ์‚ฌ์šฉ
  • //std::cin.getline() istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim ); //std::getline() (1) istream& getline (istream& is, string& str, char delim); istream& getline (istream&& is, string& str, char delim); (2) istream& getline (istream& is, string& str); istream& getline (istream&& is, string& str);
  • iomanip
    1. std::setw(x) : x ๋งŒํผ ํ•„๋“œ์˜ ๋„ˆ๋น„๋ฅผ ์„ค์ •. phonebook์€ ์—ด์นธ!
    2. std::setfill(c) : ๋นˆ ๊ณต๊ฐ„์„ c๋กœ ์ฑ„์›Œ์คŒ setfill์€ ํ•œ๋ฒˆ ์„ค์ • ์‹œ ๊ณ„์† ์ ์šฉ. ์„ค์ • ํ›„ ์›๋ž˜๋Œ€๋กœ ๋Œ๋ ค์ฃผ์–ด์•ผํ•จ
    3. std::left std::right : ์™ผ์ชฝ์ •๋ ฌ, ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ ๊ฐ€๋Šฅ
  • ์ž…์ถœ๋ ฅ ํ˜•ํƒœ ์กฐ์ž‘๊ฐ€๋Šฅ !
  • cin.ignore()
      istream& ignore (streamsize n = 1, int delim = EOF);
      //delim์˜ ๋ฌธ์ž๋ฅผ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ๋ฒ„ํผ๋ฅผ ์ง€์šด๋‹ค. ์ตœ๋Œ€ ์ง€์šธ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๋Š” n๋งŒํผ์ž„
    
      std::cin.ignore(); // ๋ฌธ์ž ํ•œ๊ฐœ ์ง€์›€ (n์€ 1, delim์€ EOF๋กœ ๋””ํดํŠธ ์ง€์ •๋˜์–ด์žˆ์Œ
      std::cin.ignore(10); //๋ฌธ์ž 10๊ฐœ ์ง€์›€ (delim์€ EOF๋กœ ๋””ํดํŠธ๊ฐ€ ๋˜์–ด์žˆ์Œ)
      std::cin.ignore(10, '\n'); //'\n'๋ฅผ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ๋ฒ„ํผ๋น„์›€, ์ตœ๋Œ€๋กœ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” 10๊ฐœ
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      //'\n'์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ฒ„ํผ๋ฅผ ๋น„์›€, ์ฒซ๋ฒˆ์งธ์ธ์ž๋Š” ์ŠคํŠธ๋ฆผ์‚ฌ์ด์ฆˆ ์ตœ๋Œ“๊ฐ’์„ ์˜๋ฏธ
  • ์ž…๋ ฅ ๋ฒ„ํผ๋ฅผ ๋น„์šธ ๋•Œ ์‚ฌ์šฉํ–ˆ๋‹ค. getline์˜ ๊ฒฝ์šฐ โ€˜\nโ€™์„ ์ž…๋ ฅ๋ฒ„ํผ๋กœ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ cin์˜ ๊ฒฝ์šฐ โ€˜\nโ€™์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ๋ฒ„ํผ์— ๋‚จ๊ฒจ๋‘๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํผ๋ฅผ ๋น„์›Œ์ค˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.