본문 바로가기

내가 꾸는 꿈

문자열 연습문제, 포인터 기초 [노베이스 게임개발 15일차]

반응형

이번시간엔 문자열에 대해 추가적인 과제까지 해결하고 다음 진도에 나가겠다.

 

 

*사용자로부터 문자열 두 개를 입력받아 두 문자열이 같다면 true를 다르다면 false를 출력하는 프로그램을 작성하세요.

이때 헤더파일 cstring에 존재하는 함수를 사용하지 않고 만들어보세요.

 

지난 시간과 같지만 strcmp 없이 문제를 풀어보라고 해서 어떻게 풀어야 할지 감이 안 잡혀서 일단 강의를 보며 진도를 나갔다.

해답은 for구문을 사용하는 것이었다.

for구문을 통해 i값을 하나씩 키워가는데 이 i가 각 문자의 자릿수를 나타낸다.

두 문자열의 각 자리를 하나씩 비교하면서 진행하다가 문자열의 끝에 나오는 Null문자를 이용하여 탈출문을 만들어준다.

하나씩 비교하다가 다른 점이 발견되면 bool same의 값이 false가 되게 하여 true일 경우는 "문자열이 같습니다."를 false일 경우 "문자열이 다릅니다."를 출력하게 된다.

 

 

*사용자로부터 문자열을 입력받아 해당 문자열을 거꾸로 출력하는 프로그램을 작성하세요. 헤더파일 cstring에 존재하는 함수를 사용하지 않고 만들어보세요.

 

이전 문제에서 보았던 \0을 이용하여 이번 문제를 풀어보았다.

거꾸로 문자를 출력하려면 먼저 마지막 글자의 위치를 찾아야겠다고 생각이 들었고 널문자를 찾는다면 마지막 문자의 위치를 알게 되어 거기서부터 거꾸로 한 글자씩 출력하겠다는 생각을 먼저 가졌다.

 

먼저 배열변수를 선언한 후 문자를 입력받았다.

자릿수를 알아낼 value값 또한 선언해 주었다.

그 후 for구문을 통해 \0을 발견할 때까지 i값을 키워나갔고 \0을 발견한 순간의 i값을 value값에 집어넣어 준 후 탈출하였다.

그다음 거꾸로 출력하기 위한 for구문을 다시 만들어서 이번에는 k값이 value값과 같거나 작을 경우까지 반복하는 문자열을 만든 후 value번째 문자부터 k값이 커짐에 따라 한 자리씩 앞의 문자를 출력하게끔 만들어 주었다.

예를 들어 설명하자면 문자열이 10개인 문자를 입력받았을 때 for구문의 첫 바퀴는 str1[10]을 출력하고 k값이 커짐에 따라 str1[9], str1[8]... 이런 식으로 역순으로 출력할 수 있게 된다.

 

 

이번엔 드디어 배운다 배운다 했던 포인터에 대해서 알아보았다.

그전에 변수에 대해 정확히 알 필요가 있다.

 

변수의 3요소:

변수의 이름 - 프로그래머가 필요로 하는 이름

변수의 주소 - 컴퓨터가 필요로 하는 이름

변수의 값 - 변수가 지니는 값

 

여기서 컴퓨터는 변수의 이름이 아닌 주소로 변수를 구분해 낸다.

이 주소를 직접적으로 조작할 수 있게 해 주는 것이 포인터이다.

 

 

모든 데이터 타입 바로 오른쪽에 *(애스터리스크)를 붙여주게 되면 그것을 포인터 데이터 타입이라고 한다.

 

이렇게 되면 컴퓨터에게 유효한 주소를 해당 변수명에 할당이 되게 된다.

이 주소값을 가져와서 조작하기 위해서는 변수명 바로 왼쪽에 &(앰퍼샌드)를 붙여주면 된다.

scanf를 사용할 때 &를 붙여주는 이유도 주소를 불러오기 위해서였다.

 8번과 같은 문장을 사용하게 되면 valueAddress라는 주소의 변수에 value의 실제 주소를 같게 만들어준다.

이때 valueAddress에 *를 붙여주고 그 값을 200으로 할당하면 valueAddress의 주소값이 200이 되고 그럼 value의 주소값 또한 200이 된다.

valueAddress의 주소값을 변경한 후 value의 값은 건드리지 않고 value의 값을 출력하니 200의 값이 출력되었다.

 

후기:

아직은 포인터에 대해 정확하게 이해하지 못했지만 라라님도 처음엔 이해하지 못했다고 하며 사용하다 보면 익숙해질 거라고 해서 일단은 추후 강의를 통해 연습해 볼 생각이다

 

 

 

 

*본 포스팅은 학생의 입장에서 쓴 글로 정확하지 않을 수 있으며 댓글로 피드백해 주시면 감사하겠습니다.

클래스 101 개발자 라라 님의 강의를 통해 학습한 내용을 기반으로 두고 있습니다.

반응형