본문 바로가기

내가 꾸는 꿈

문자열 #2[노베이스 게임개발 14일차]

반응형

이번시간에는 문자열에 대해 더 공부해 보았다.

 

지난 포스팅에서 출력까지 배웠으므로 이번엔 입력에 대해 알아보았다.

문자열을 입력받기 위해서는 똑같이 scanf를 사용하는데 몇 가지 다른 점이 있다.

먼저 변환문자로는 %s를 이용하여 문자열을 집어넣을 수 있다.

그리고 배열변수를 이용할 때는 5번째 줄처럼 대괄호를 사용하지 않아도 된다.

또 다른 scanf와는 다르게 변수 앞에 &를 입력하지 않아도 된다.

%s를 사용할 땐 그 사이에 %99[^\n]s처럼 옵션을 이용해야 하는데 여기서는 99개의 문자열은 받고 줄 바꿈은 받지 않는다는 뜻이다.

이를 사용하는 이유는 사용자가 얼마 큼의 문자열을 입력할지 모르기 때문에 정해주는 것이라고 한다.

여기서 100의 크기인데 99개만 받는 이유는 널문자인 \0이 들어갈 자리를 만들어 주는 것이다.

이때 Null문자가 있어야 원하는 값만 출력할 수 있게 된다. 그렇지 않다면 알 수 없는 이상한 값이 출력되게 된다.

 

이런식으로 문자를 입력하면 문자가 그대로 출력된다.

 

이번엔 지난 포스팅에 잠깐 사용했던 strcpy를 더 알아보겠다.

 

방금처럼 inputstring이라는 배열변수를 선언해 준 후 배열변수를 사용자로부터 입력받는다.

그 후 duplicatedstring이라는 배열변수를 선언해 준 후 strcpy함수를 이용하여 duplicatedstring 변수에 inputstring의 값을 그대로 집어넣어 줄 수 있다.

이것을 출력하면 inputstring의 값과 같은 값이 출력된다.

 

이처럼 strcpy는 함수의 첫 번째 파라미터에 두 번째 파라미터의 값을 집어넣어 준다고 생각하면 된다.

이때 이전처럼 단순하게 =을 이용하여 문자를 집어넣을 수 없다.

이것은 포인터로서 주소값을 가지고 있는 고유한 값이기 때문에 값을 집어넣어 줄 수 없고 함수를 이용하여 배열변수의 값을 하나하나 옮겨서 복사해 주는 것이다.

 

이번에는 strcmp() 함수에 대해 알아보았다.

 

먼저 str1, str2의 변수를 선언해 주고 각 배열변수에 문자를 집어넣어 준다.

그 후 strcmp함수에 두 변수를 집어넣어 준 후 result에 값을 넣어주고 출력하게 된다면

그림처럼 -1의 값이 나오게 된다.

strcmp함수는 두 문자열을 비교해 주는 함수로 두 함수가 같다면 0을, 사전적 우선순위에 따라 왼쪽이 크다면 -1, 오른쪽이 크다면 1의 값을 받게 되는 것이다.

여기서 사전적 우선순위는 사전에서의 순서를 말하는데 한마디로 ABC순서 ㄱㄴㄷ순서를 말한다.

 

여기서도 str1과 2는 포인터이기 때문에 if절을 이용하여 비교구문인 ==을 사용해서는 안된다.

strcmp를 이용하여 두 문자가 같은 글자인지 판단할 수는 있어도 실제로 이 두 문자는 같은 값이 될 수가 없기 때문이다.

 

이제 연습문제를 통해 실력을 키워나갈 시간이다.

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

 

먼저 항상 이용하던 것처럼 함수를 이용해서 사용자로부터 입력을 받으려고 했다.

그런데 문제가 발생하였는데 함수를 이용하여 수를 입력받을 때는 = 기호를 사용하면 됐지만

문자를 입력받을 때 =를 사용하면 안 되므로 strcpy를 사용하려 했다.

하지만 다음과 같은 오류가 나타나게 되었다.

함수를 이용하기 위해서는 아직 더 공부가 필요한 것 같아 일단 코드가 돌아가도록 풀어서 쓰기로 하였다.

 

 

 

다음과 같이 배열변수를 100의 크기로 두 개 지정해 주고 각각 변수를 입력받은 후,

두 변수가 strcmp에 의해 같다면 0의 값이 나올 것이기 때문에 if절에서 0인지 그 외인지 판단하게 만들어서 true와 false를 출력하게 만들었다.

 

문자열이 같다면 true가 다르다면 false가 출력이 되는 모습이다.

이때 대소문자도 구분하기 때문에 Hello와 hello를 구분해 내는 모습이다.

 

후기:

이제 조금씩 알 수 없는 내용도 나오기 시작했는데 까먹지 말고 꼭 찾아서 해결해야겟다.

 

 

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

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

반응형