티스토리 뷰

1. 객체포인터 사용순서 

  (1) 객체 포인터 변수선언

 객체 포인터 변수 선언는

객체이름 *변수이름;      으로 선언할 수 있으며


 Circle이라는 객체가 존재 할 경우

Circle *p; 와 같이 객체 포인터 변수를 선언할 수 있습니다.


  (2) 포인터변수에 주소지정

포인터 변수에 주소를 지정하는 방법은 &를 사용하여

객체 포인터 변수 = &객체변수;    를 이용하여 객체 포인터 변수에 주소를 지정할 수 있습니다.

p = &donut;


  (3) 포인터를 이용한 객체 멤버접근

객체 포인터로 멤버를 접근할 때 사용가능한 두가지 방법이 있습니다.

하나는 객체 이름으로 멤버를 접근할 때 사용했던 .와 객체 포인터로 접근하는 방식인 ->가 있습니다.

 

먼저 화살표 연산자 ->로 접근하는 방법을 보여드리겠습니다.

p->getArea();       와 같이 객체 포인터 변수에서 화살표를 사용하는 방법이 있습니다.


화살표 ->를 제외하고는 점(.) 연산자를 사용하는 방법이 있습니다.

점 연산자를 이용할 때 주의할 점은 객체 포인터 변수를 이용할 때에

(*p).getArea();      와 같이 포인터 변수 앞에 스타(*)를 붙여 주어야 합니다.



2. 객체포인터 예제


소스코드(주석)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class Circle {
    // 반지름을 저장할 Circle 클래스의 멤버 변수
      int radius;
public:
    // 파라미터가 없는 생성자
       Circle() {radius = 1;}
    // 파라미터가 하나 존재하는 생성자
       Circle(int r) {radius = r;}
    // 넓이를 계산할 Circle 클래스의 멤버 함수
       double getArea();
};
 
double Circle::getArea() {
       return 3.14*radius*radius;
}
 
int main(int argc, char *argv[])
{
    Circle donut;
    Circle pizza(30);
    
    // 객체 이름으로 멤버 접근 
    cout << donut.getArea() << endl;
    
    // 객체 포인터로 donut 객체 주소 지정 
    Circle *p;
    p = &donut;
    
    // 포인터를 이용한 객체 멤버 접근 두가지 방식  donut객체 
    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;
    
    // 객체 포인터로 pizza 객체 주소 지정 
    p = &pizza;
    // 포인터를 이용한 객체 멤버 접근 두가지 방식  pizza객체 
    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;
    
    system("PAUSE");
    return 0;
}
 

c



실행결과



3. 객체배열 예제

(1) 프로그램 4-2 소스코드, 실행결과, 주석


소스코드 (주석)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class Circle {
      int radius; // 반지름 값 
public:
       Circle() {radius = 1;} // 파라미터가 없는 생성자 
       Circle(int r) {radius = r;} // 파라미터가 하나인 생성자 
       void setRadius(int r) {radius = r;} // 반지름을 설정하는 함수 
       double getArea(); // 면적을 출력하는 함수 
};
 
double Circle::getArea() {
       return 3.14*radius*radius;
}
 
int main(int argc, char *argv[])
{
 
    // Circle 클래스의 기본 생성자로 배열이 초기화 되었다. 
    Circle circleArray[3];
    
    // 배열의 원소 객체들의 radius 값을 변경한다. 
    circleArray[0].setRadius(10);
    circleArray[1].setRadius(20);
    circleArray[2].setRadius(30);
    
    // 배열의 각 객체들의 면적을 출력한다. 
    for(int i = 0; i < 3; i++)
            cout << "Circle" << i << "의 면적은 " << circleArray[i].getArea() << endl;
            
    // 포인터 변수에 배열의 첫 주소값인 배열명을 지정해준다. 
    Circle *p;
    p = circleArray;
    
    // 포인터를 이용한 객체 멤버 접근 방식으로 Circle의 면적을 출력한다. 
    for(int i = 0; i < 3; i++) {
            cout << "Circle" << i << "의 면적은 " << p->getArea() << endl;
            p++;
    }
    system("PAUSE");
    return 0;
}
 
cs


실행결과



(2) 객체배열 소멸순서

높은 인덱스에서부터 원소 객체가 소멸되며 각 객체마다 ~소멸자가 실행됩니다. 


생성 순서가 circleArray 배열의 0, 1, 2의 인덱스 객체부터 생성이 되었기 때문에 circleArray 배열의 높은 인덱스이자 나중에 생성된 객체인 2번 인덱스부터 소멸자가 실행되어 2, 1, 0 인덱스 순으로 소멸이 진행됩니다.

 

 

 

 



(3) 객체배열 초기화 프로그램 4-3 소스코드, 실행결과, 주석


소스코드(주석)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class Circle {
      int radius;
public:
       Circle() {radius = 1;} // 파라미터가 없는 생성자 
       Circle(int r) {radius = r;} // 파라미터가 하나인 생성자 
       void setRadius(int r) {radius = r;} // 반지름을 설정하는 함수 
       double getArea(); // 면적을 출력하는 함수 
};
 
double Circle::getArea() {
       return 3.14*radius*radius;
}
 
int main(int argc, char *argv[])
{
    // 객체 배열을 생성하여 초기화 한다.
    Circle circleArray[3= {Circle(10), Circle(20), Circle() };
    
    // 객체 배열의 각 원소의 Circle객체의 면적을 출력한다.
    for(int i = 0; i < 3; i++)
            cout << "Circle" << i << "의 면적은 " << circleArray[i].getArea() << endl;
 
    system("PAUSE");
    return 0;
}
 
cs


실행결과


 

  (4) 객체포인터, 다차원배열 예제코드, 실행결과

 

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
class Sample {
        int a;
    public:
        Sample() { a = 100cout << a << ' '; }
        Sample(int x) {a = x; cout << a << ' ';}
        Sample(int x, int y) {a = x*y; cout << a << ' ';}
        int get() {return a;}
    };
 
int main(int argc, char *argv[]) {
    Sample arr[3]; // 파라미터 없는 Sample클래스의 생성자 3개 생성 
    Sample arr2D[2][2= {{Sample(23), Sample(24)}, {Sample(5), Sample()}}; // 6, 8, 5 100으로 a가 초기화된 Sample 생성자 4개 생성 
    int sum = 0;
    
    // 3번 
    Sample *= arr;  // 객체 포인터로 arr 주소값을 가져온다. 
    sum = 0;
    for(int i = 0; i < 3; i++) {    // 객체 포인터로 arr객체 배열원소의 합을 구한다. 
        sum += p->get();
        p++;
    }
    cout << "\nsum = " << sum << endl;
    
    // 4번 
    sum = 0;
    for(int i = 0; i < 2; i++) {    // 반복문을 두번 돌려 이차원 배열의 원소의 합을 구한다. 
        for(int j = 0; j < 2; j++) {
            sum += arr2D[i][j].get();
        }
    }
    cout << "sum = " << sum << endl;
    
    return 0;
}
cs

실행결과

 

 

 

4. 메모리할당
  (1) 정적할당 개념, 단점 : 

개념: 정적할당은 사용하기 이전에 한번 메모리를 할당 받으면 그 이후엔 메모리를 더이상 확보할 수 없는 방식입니다.

 

단점: 처음에 할당받은 메모리를 전부 쓰지 못하면 나머지 메모리가 낭비되는 단점이 있으며 혹시 메모리가 할당받은것이 부족할 수도 있다는 단점이 존재합니다.


  (2) 동적할당 개념, 정적할당에 비교한 장점

개념: 동적할당은 필요한 만큼 메모리를 할당받아 사용하고 필요하지 않은 메모리는 반환하여 프로그램 사용도중 원하는 만큼 메모리를 원하는대로 사용할 수 있는 방식입니다.

(동적 메모리 할당/반환 메커니즘 필요)

 

단점: 할당을 받고 반환을 해주지 않을경우 메모리 낭비가 심해지고 적절하지 않은 메모리를 반환하면 실행 오류가 발생할 수도 있습니다. 또한 배열단위 반환이 되지 않으니 조심해야 합니다.

 


5. 동적할당 사용예제(프로그램4-5) 주석(할당/해제 명령, 초기화)

 

주석

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    int *p;        // int형 포인터 변수 p 생성 
    
    p = new int;    // 포인터 변수 p에 int형 타입의 정수 공간 할당 
    if(!p) {        // 포인터 변수 p에 메모리가 할당되지 않았을 때 실행 
        cout << "메모리를 할당할 수 없습니다." << endl;
        return 0
    } 
    
    *= 5;            // 포인터 변수 p가 가리키고 있는 위치에 5 삽입; 
    int n = *p;        // int형 변수 n에 포인터 변수 p가 가리키고 있는 위치의 데이터 삽입 
    
    cout << "*p = " << *<< endl;    // 포인터 변수  p가 가리키고 있는 위치의 데이터 삽입 
    cout << "n = " << n << endl;    // int형 변수 n의 데이터를 출력 
    
    delete p; //할당받은 메모리 반환 
    
    system("pause"); 
    return 0;
}
 
cs

 

6. 배열의 동적할당 예제

(1) 4-6 소스코드, 실행결과, 주석(배열의 동적할당 사용법, 배열의 동적할당시 주의사항)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    cout << "입력할 정수의 개수는?";
    int n;
    cin >> n;
    if(n <= 0return 0;
    int *= new int[n]; // 배열의 동적할당 사용 방법
    if(!p) { // 메모리 할당에 성공했는지 판별 
           cout << "메모리를 할당할 수 없습니다.";
           return 0;
    }
    
    for(int i=0; i < n; i++) {     //반복문으로 정수 받기 
            cout << i + 1 << "번째 정수: ";
            cin >> p[i]; // 배열의 동적할당시 배열을 사용하듯 포인터변수명[인덱스]로 ㅅ
    }
    
    int sum = 0;
    for(int i= 0; i < n; i++) {
            sum += p[i];
    }
    cout << "평균 = " << sum/<< endl;  // 평균값 출력 
    
    delete [] p; // 배열 메모리를 반환할때 []를 생략하면 오류는 생기지 않지만 비정상적인 반환이 이뤄집니다.
    
    system("pause"); 
    return 0;
}

실행결과



(2) 배열의 동적할당 예제2 소스코드, 실행결과

소스코드, 실행결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    int *= new int[5];
    for(int i=0; i<5; i++) {
            cout << i+1 << "번째 값 입력: ";
            cin >> p[i];
    }
    
    int max = p[0];
    for(int i=1; i<5; i++)
    {
          if(p[i] > max) {
                  max = p[i];
          }
    }
    
    cout << "최대값은: " << max << endl;
    delete[] p;
    
    
    system("pause"); 
    return 0;
}
 
cs




7. 객체의 동적할당

4-7 소스코드, 실행결과, 주석(객체의 동적할당 사용법)

실행코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
class Circle {
    int radius; 
public:
    Circle(); 
    Circle(int r);
    ~Circle();
    void setRadius(int r) { radius = r; }
    double getArea() { return 3.14*radius*radius; }
}; 
 
Circle::Circle() {
    radius = 1;
    cout << "생성자 실행 radius = " << radius << endl;
}
 
Circle::Circle(int r) {
    radius = r;
    cout << "생성자 실행 radius = " << radius << endl;
}
 
Circle::~Circle() {
    cout << "소멸자 실행 radius = " << radius << endl;
}
 
int main() {
    Circle *p, *q; // Circle 클래스 포인터변수 p, q 생성
    p = new Circle; // 포인터 변수 p에 기본생성자로 동적 할당
    q = new Circle(30); // 포인터 변수 q에 매개변수가 한개 있는 생성자로 동적 할당
    cout << p->getArea() << endl << q->getArea() << endl;
    delete p; // 포인터 변수 p가 가지고 있는 동적 메모리 반환
    delete q; // 포인터 변수 q가 가지고 있는 동적 메모리 반환
    
    
    system("pause"); 
    return 0;
}
 

cs

실행결과


8. 객체배열의 동적할당

4-9 소스코드, 실행결과, 주석(객체배열의 동적할당 사용법)

소스코드, 주석



실행결과, 주석

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
class Circle {
    int radius; 
public:
    Circle(); 
    Circle(int r);
    ~Circle();
    void setRadius(int r) { radius = r; }
    double getArea() { return 3.14*radius*radius; }
}; 
 
Circle::Circle() {
    radius = 1;
    cout << "생성자 실행 radius = " << radius << endl;
}
 
Circle::Circle(int r) {
    radius = r;
    cout << "생성자 실행 radius = " << radius << endl;
}
 
Circle::~Circle() {
    cout << "소멸자 실행 radius = " << radius << endl;
}
 
int main() {
    Circle *pArray = new Circle[3]; // Circle 배열의 동적 할당. 
    pArray[0].setRadius(10);  // radius 값이 10
    pArray[1].setRadius(20);  // radius 값이 20
    pArray[2].setRadius(30);  // radius 값이 30
    
    for(int i=0; i<3; i++)  // pArray로 getArea() 출력 
    {
            cout << pArray[i].getArea() << endl;
    }
    
    Circle *= pArray; // Circle클래스 포인터 변수 p에 pArray의 값 대입 
    for(int i=0; i<3; i++// 포인터 변수 p로 circle 동적 배열의 getArea()출력 
    {
            cout << p->getArea() << endl;
            p++;
    }
    
    delete [] pArray;
    
    system("pause"); 
    return 0;
}
 
cs

실행결과


9. 메모리누수(memory lear)현상이란, 예를 설명하기(2가지)

메모리 누수 현상이란?

- 메모리 누수 현상이란 동적으로 할당을 받은 메모리의 주소를 잃어버려 메모리를 힙에 반환할 수 없게 된 것을 말합니다.

char n = 'a';

char *p = new char[3];

p = &n;

  다음과 같은 상황에서 포인터 변수 p는 크기가 3인 캐릭터 배열의 주소를 잃어버려 메모리 누수가 발생한 것입니다.


ex)

    a)      // p에 처음으로 동적할당 받은 크기가 3인 캐릭터 배열의 주소를 잃어버린 상황

       char n = 'a';

 char *p = new char[3];

 p = &n;


   b)     // p에 크기가 3인 캐릭터 배열을 100번 할당하여 앞선 99번의 주소를 잃어버린 ㅅ

       char *p;

 for(int i = 0; i < 100; i++) {

      p = new char[3];

 }



10. this포인터의 개념, 필요한 경우

)) this포인터란?

   - this는 객체 자신에 대한 포인터로서 클래스의 멤버 함수 내에서만 사용이 됩니다.

     this는 전역 변수도 아니고 함수 내에 선언된 지역 변수도 아닙니다.

     this는 객체의 멤버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체의 주소입니다.


)) 필요한경우?

   - this가 필요한 경우는 클래스의 멤버변수와 멤버함수 안의 변수의 이름이 서로 같을 때

     클래스의 변수인지 멤버 함수의 변수인지를 구별할 때 필요합니다.

     즉 연산자의 중복을 구현할 때 this연산자가 필요합니다.


10. string

10 - 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    // 1.
    string a = "Java", b = "C++";
    a = b;                          //  a는 "C++" 이 된다. 
    cout << "a : " << a << endl;
    cout << "b : " << b << endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

a : C++

b : C++



10-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
     // 2.    string name = "Kitae";
    string alias = "Kito";
    int res = name.compare(alias);                // name과 alias를 비교한다. 
    if(res == 0cout << "두 문자열이 같다.";     // name과 alias가 동일 
    else if(res < 0cout << name << " < " << alias << endl;      // name이 앞에 온다. 
    else cout << alias << " < " << name << endl;       // name이 뒤에 온다. 
    
    if(name == alias) cout << "두 문자열이 같다" << endl;        // name과 alias가 동일 
    if(name < alias) cout << name << "이 " << alias << "보다 사전에서 먼저 나온다" << endl;     // name이 앞에 온다. 
 
    system("pause");
    return 0;
}
 
cs

실행결과

Kitae < Kito

Kitae이 Kito보다 사전에서 먼저 나온다



10-3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    // 3.    string a1("I"); 
    a1.append(" love");      // a1의 뒤에 " love"를 연결하여 a1에 삽입
    cout << a1 << endl
    
    string a2("I love C++");
    string b2(".");
    string c2;
    c2 = a2 + b2;  // a2와 b2를 연결한 문자열을 c2에 삽입 
    cout << c2 << endl;
    cout<< endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

I love

I love C++



10-4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //4.    cout << "01234567890123" << endl;
    string a3("I love C++");
    a3.insert(2"realy ");     // a3의 2번 인덱스에 "realy "를 삽입한다. 그 뒤의 인덱스는 밀려난다. 
    cout << a3 << endl;
    
    a3.replace(210"study");    // a3의 2번 인덱스부터 10번 인덱스까지를 "study"로 치환한다. 
    cout << a3 << endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

01234567890123

I realy love C++

I study C++



10-5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //5.     
string a4("I study c++");
int length = a4.length();      // a4 문자열의 길이를 구하는 함수 
    int size = a4.size();          // a4 문자열의 길이를 구하는 함수  length와 동일하게 작동 
    int capacity = a4.capacity();  // a4 문자열의 크기(용량)을 구하는 함수 
    cout << "length = " << length << " , size = " << size << " , capacity = " << capacity << endl;
    cout<< endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

length = 11 , size = 11 , capacity = 11



10-6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //6.    cout << "01234567890123" << endl; 
    string a5("I love C++");
    cout << a5 << endl;
    a5.erase(07);          // 0번 인덱스부터 7번 인덱스까지를 제거한다. 뒤의 문자열은 그만큼 땡겨진다. 
    cout << "a5 = " << a5 << endl;
    
    a5.clear();              // a5 문자열을 Clear 즉 깨끗하게 지우라는 함수. 
    cout << "a5 = " << a5 << endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

01234567890123

I love C++

a5 = C++

a5 = 


10-7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //7.    cout << "01234567890123" << endl; 
    string b1 = "I love C++";
    cout << b1 << endl;
    
    string c1 = b1.substr(24);
    cout << "c1 = " << c1 << endl;
    
    string d1 = b1.substr(2);
    cout << "d1 = " << d1 << endl;
 
    system("pause");
    return 0;
}
 
cs

실행결과

01234567890123

I love C++

c1 = love

d1 = love C++


10-8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //8.
    cout << "01234567890123"  << endl;
    string e = "I love love C++";
    int index = e.find("love");
    cout << "index = " << index << endl;
    
    
    index = e.find("love", index + 1);
    index = e.find("C#");
    cout << "C#문자열의 위치 : " << index << endl;
    
    index = e.find('v'7);
    cout << "7번째 이후의 v 위치 : " << index << endl;
    
    system("pause");
    return 0;
}
 
cs

실행결과

index = 2

C#문자열의 위치 : -1

7번째 이후의 v 위치 : 9


10-9(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //9-1
    cout << "01234567890123" << endl;
    string f = "I love C++";
    cout << f << endl;
    
    char ch1 = f.at(7);
    cout << "7번째 문자 : " << ch1 << endl
    
    system("pause");
    return 0;
}
 
cs

실행결과

01234567890123

I love C++

7번째 문자 : C


10-9(2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
    //9-2
    string f("I love C++");
    char ch2 = f.at(f.length() - 1);        // f 문자열의 마지막 문자를 ch2에 삽입 
    cout << "문자열의 마지막 문자는 " << ch2 << endl;
    
    system("pause");
    return 0;
}
 
cs

실행결과

문자열의 마지막 문자는 +



10-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
 
using namespace std;
 
int main() {
    //10.
    string year1 = "2014";
    string year2 = "14";
    
    int n1 = atoi(year1.c_str());
    int n2 = atoi(year2.c_str());
    
    int n3 = n1 - n2;
    
    cout << n3 << endl;
    
    system("pause");
    return 0;
}
 
cs

실행결과

2000


10-11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
 
using namespace std;
 
int main() {
    //10.
    string a = "hello";
    for(int i = 0; i< a.length(); i++)
            a[i] = toupper(a[i]);
    cout << a;
    if(isdigit(a[0])) cout << " 숫자";
    else if(isalpha(a.at(0))) cout << " 문자" << endl;
    
    system("pause");
    return 0;
}
 

cs

실행결과

HELLO 문자

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함