본문 바로가기
School Study/2021-2

[week 05] C++ 복습_4장 수학함수, 문자, 문자열

by 전전긍긍 2021. 10. 17.

20210930_C++_공부기록

 

  • 수학함수 ( pow(), sqrt(), rand(), min, max, abs )
  • 문자 데이터 유형
  • ASCII 코드
  • 형변환
  • 문자 - 산술연산자, 문자비교
  • 문자함수
  • 이스케이프 시퀀스
  • string
  • 문자열 - 첨자 연산자, 연결, 비교, 입력
  • 콘솔 출력 형식 (setprecision, fixed, setw-left,right)

c에는 기본 데이터 유형이 "4가지"가 있다.

1. 정수형

2. 실수형

3. bool

4. char ← 오늘 배우는 내용


 

1. 수학함수

일반적인 수학적 기능을 수행하기 위해 <cmath> <cstdlib> <algorithm> 헤더에서 유용한 함수를 제공함

 

<cmath>

 

pow(a,b) 함수는 지수 계산을 한다

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	cout << pow(2.0, 3) << endl;
    return 0;
}
//8 (2의 3제곱)

sqrt(x) 함수는 x의 루트값을 반환한다.

#include <cmath>
using namespace std;

int main()
{
	cout << sqrt(4) << endl;
    return 0;
}
//2

 

<cstdlib>

 

rand() 함수는 0 ~ 32767(short함수의 max) 사이의 임의의 정수를 발생시킨다.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int num = rand() % 10; // 10으로 나누면 나머지가 0~9이기 때문에 0~9사이의 임의의 정수 발생
}

 

<algorithm>

 

min, max 함수는 두 수 중 최소값과 최대값을 반환

abs 함수는 절댓값을 반환

 


2. 문자 데이터 유형 char

- char는 하나의 문자를 표현 ( 1byte )

- 문자는 양쪽에 '작은 따옴표'를 기입

- 이진수만 읽는 컴퓨터 내부에 저장하기 위해 아스키코드의 숫자를 내부적으로 저장

*한글은 문자의 배열이나 string을 사용한다.

char letter = 'A';
char numChar = '4'; //'4'도 문자이다

 

char와 숫자 유형간의 형변환

char c = 65;
cout << c; // A 출력

char c = 65.26; //실수값이 형변환 할 때는, 실수가 정수로 먼저 변환. 그리고 char로 변환
cout << c; // A 출력

int i = 'A';
cout << i; // 65출력

 

문자에 대한 산술연산자

-char 유형은 내부적으로 바이트 크기의 정수이므로 모든 숫자연산은 char 연산에 적용될 수 있다.

-char 피연산자는 다른 피연산자가 숫자 도는 문자이면 자동으로 숫자로 형변환 된다.

int i= '2' + '3'; //'2'가 아스키 코드 50
cout << "i is " << i << endl; // 50+51 이므로 101 출력

int j = 2 + 'a';
cout << "j is " << j << endl; //'a'는 97이므로 정수형 j는 99 출력

cout << j << static_cast<char>(j) << endl; //아스키코드 99에 해당하는 'c'출력

 

문자 비교와 테스트

- ASCII 코드로 문자를 관계 연산자를 사용하여 비교 가능

'a' < 'b' // 거짓. 'a'는 97 'b'는 98

3. 문자함수

<cctype> 헤더파일에는 문자를 테스트하고 변환하는 몇가지의 함수가 포함되어 있다.

<cctype>헤더파일

 

문자함수 (실습1)

#include <iostream>
#include <cctype>
using namespace std;

int main()
{
    cout << "문자를 입력하시오: ";
    char ch;
    cin >> ch;

    if (islower(ch))
    {
        char upperch = toupper(ch);
        cout << "입력한 문자는 소문자 " << ch << endl;
        cout << "대문자로 바꾸면 " << upperch << endl;
    }
    else if (isupper(ch))
    {
        cout << "입력한 문자는 대문자 " << endl;
        cout << "소문자로 바꾸면 " <<
            static_cast<char>(tolower(ch)) << endl;
    }
    else if (isdigit(ch))
    {
        cout << "입력한 문자는 숫자 " << ch << endl;
    }
    return 0;

}
//문자를 입력하시오: A
//입력한 문자는 대문자
//소문자로 바꾸면 a

 

이스케이프 시퀀스

특수문자를 표현하기 위해 사용

역슬래쉬 + 문자


4. string 유형

문자열 ○ 

기본타입 ×

class  ○ 

- 문자열을 표현하기 위함

- string 유형을 객체유형이며, 행당변수를 선언함으로써 실제 객체가 선언

- <string> 헤더파일에 정의된 클래스

 

sring 유형 _ string인스턴스

함수 기능
length() 문자열 내 문자의 수를 반환
size() length() 와 동일
at(index) 문자열에서 지정된 인덱스의 문자를 반환

 

#include <iostream>
#Include <string>
using namespace std;

int main()
{
	string msg = "ABCD";
    cout << msg.length() << endl; // 4출력
    cout << msg.at(0) << endl; // A출력
    
    string s = "bottom";
    cout << s.length(); //6출력
    cout << s.at(1); // o 출력 (0부터 시작하니까)
    //문자열 첨자 연산자
    s[0] = 'P'; //문자 P를 끌어옴
    cout << s[0]; // P출력 at대신에 인덱스로 쓸 수 있음
}

 

문자열 연결&비교

//증강 += 연산자도 문자열 연결에 사용할 수 있다.
string msg = "programming";
msg += "C is fun";
cout << msg << endl; //programming C is fun

//두 개의 문자열을 비교하기 위해서 관계연산자를 사용한다.
string s1 = "ABC";
string s2 = "ABE";
cout << (s1 == s2) << endl; // 0출력 (거짓)

 

문자열 입력

getline() 함수 -> 공백을 포함하고 있는 문자열을 받기 쉬움

getlind(어디에서, 어디로, 어디까지) -> ex. getline(cin, city, '\n')

 

알파벳 순으로 화면에 출력하기 (실습2)

#include <iostream>  
#include <string>
using namespace std;

int main()
{
    string city1, city2;
    cout << "Enter the first city: ";
    getline(cin, city1);
    cout << "Enter the second city: ";
    getline(cin, city2);

    cout << "The cities in alphabetical order are ";
    if (city1 < city2)
        cout << city1 << " " << city2 << endl;
    else
        cout << city2 << " " << city1 << endl;

    return 0;
}
//Enter the first city: los angeles
//Enter the second city: new york
//The cities in alphabetical order are los angeles new york

5. 콘솔 출력 형식

 

setprecision(n)

단독적으로 쓰일 때 : 실수에서 표시될 전체 자릿수를 지정

n이상이면 자르지 않고 그상태로 둔다.

변경될 때까지 유효한 상태

 

fixed 조종자

단독적으로 쓰일 때 : 과학적 표기법을 사용하지 않고 디폰트값으로 소수점 이하 6자리까지 나타냄

 

 

fixed + setprecision(n)

연결시키면 소수점 이하의 자리수를 지정할 수 있음

 

setw 조종자

최소 열의 수를 지정할 수 있다.

setprecision(n)과 다르게 다음 출력에만 유효하다

지정된 폭보다 더 많은 공간이 필요할 때는 폭이 자동으로 증가된다.

 

출력하기 (실습3)

#include <iostream>  
#include <iomanip>
using namespace std;

int main()
{
	double grade = 3.500;
	
	cout << setw(12) << "학과:" << setw(15) << "컴퓨터공학" << endl;
	cout << setw(12) << "학점:" << setw(15) << fixed << setprecision(1) << grade << endl;
	cout << setw(12) << "이름:" << setw(15) << "\"홍길동\"" << endl;
	
	return 0;
}
/*
       학과:     컴퓨터공학
       학점:            3.5
       이름:       "홍길동"
*/