이번문제는 Mystring이라는 class선언 후,
그 class를 통해서 자기가 원하는 문자의 index를 출력하는 문제였습니다.
C++라는 객체지향프로그래밍 언어를 사용하면서 처음으로 클래스란것을 다뤄보게 되는 문제였습니다.
저는 4가지 단계로 생각을 했습니다.
1. 먼저 main함수에서 문자열을 입력을 받은 후, 문자열의 길이를 계산.
2. 그 다음 Mystring class형 변수를 선언한 후, 그 class의 함수를 선언해서 입력받은 문자열과, 문자열의 길이를 인자로 넘겨주기.
3. 그 후 자기가 찾고싶은 문자를 입력 받은 후, 그 문자도 class의 다른 함수의 인자로 넘겨주고, index라는 변수에 그 문자가 몇번째 index인지 혹은 없는지를 return 받기.
4. index의 값이 -1(문자가 없는 경우)이면 error 출력, -1이 아닌경우는 index를 출력
#include<iostream>
using namespace std;
class Mystring//class선언
{
private: char* Mystr;
public:
Mystring() {
Mystr = new char[100];
}
~Mystring() {
delete[] Mystr;
}
char* Mystrcpy(char* src, int len)
{
for (int i = 0; i < len; i++)
{
*(Mystr + i) = *(src + i);
}
*(Mystr + len) = NULL;
cout << "Copy String : " << Mystr << endl;
return Mystr;
}
int Find_char(char c)
{
int count;
int len;
for (len = 0; *(Mystr + len) != 0; len++)
{
}
for (count = 0; *(Mystr + count) != c; count++)
{
}
if (count<=len)
return count;
else return -1;
}
};
int main()
{
Mystring obj;//class변수 선언
char find_cha;
int index = 0;
char* main_string= new char[100];
//메모리할당
int count = 0;
cin >> main_string;
for (count; main_string[count] != 0; count++)
{//문자열 길이
}
main_string = obj.Mystrcpy(main_string, count);//class함수 사용
cin >> find_cha;
index = obj.Find_char(find_cha);
if (index == -1)
cout << "ERROR";
else
cout << index << endl;
main_string = NULL;//할당이 해제된 주소를 다시 초기화
delete []main_string;
return 0;
}
이 문제는 이렇게 해결했지만, 저는 여기서 한가지를 깨달았습니다.
메모리해제 윗줄의 코드를 보시면
main_string = NULL;
이 있는데, 이처럼 해제를 할 배열의 주소를 다시 초기화 하지않고, 해제를 할 경우에는 해제가 완벽히 되지가 않습니다.
그니까 꼭꼭 주소를 다시 초기화 시켜주고, 해제하는 습관을 기릅시다 !
이번문제를 풀면서 느낀점은
1. class를 써보면서 점점 더 객채지향프로그래밍에 빠져드는 느낌이었습니다.
2. 메모리해제에 관해서 더 알차게 배운것 같습니다.
#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.
2-7 대학교, 과, 학생정보에 관한 상속CLASS 만들기 (0) | 2021.08.06 |
---|---|
2-6 계좌관리 class 구현 (0) | 2021.08.05 |
2-4 9*9행렬을 3*3곱하기로 나눠서 연산 (0) | 2021.07.29 |
2-3 함수포인터 void(*fp)() 사용 (0) | 2021.07.20 |
2-2 단어장 만드는 프로그램 (0) | 2021.07.15 |
댓글 영역