저번 시간에 배열에 대해서 다루었습니다. 이번에는 무엇에 대해 다루어 볼까요? 간단하게 문자열에 대해서 다뤄 보도록 하겠습니다. char형은 문자를 저장합니다. 그러면 그것들을 연속적으로 모아놓은 것은 무엇일까요? 예를 들자면 'c', 'h', 'o'가 모여서, "cho"가 되고, 'd', 'o', 'g'가 모여서 "dog"가 됩니다. 이것을 우리는 문자열이라고 합니다. 그러면, 문자열의 끝은 어떻게 판단할까요? 이게 문제가 될 수 있어요. 배열에서 끝은 어떻게 판단하나요? 사실, 이것은 배열의 크기에, 각 원소의 크기로 나누면 될 겁니다. 이 부분은 크게 어려울 건 없어 보여요. 그런데, 이런 경우를 생각해 봅시다. 이 때에는 출력 결과가 어떻게 나오나요? 저는 main 함수 안에, str 배열을 선언..
문자열 검색 결과
java String의 startsWith 메서드는, str이 prefix로 시작하는지를 검사하는 함수입니다. 2번째 인자에 offset을 넣을 수도 있는데요. 이는 str의 offset부터 끝까지는 부분 문자열 sub로 잡았을 때, sub가 prefix로 시작하는지를 검사합니다. 그러면, endsWith도 내부적으로는 startsWith를 쓰겠네요. 쓰는 방법은 아래와 같습니다. boolean startsWith(String prefix); boolean startsWith(String prefix, int offset); 보통 위에 것을 꽤 쓰는 편입니다. 그러면 이들이 어떻게 동작하는지 내부를 간단히 보아야 겠군요. 먼저 String 인자만 하나 넘겨주면 그림에서의 1433번째 줄에 들어갑니다. 그..
c++이나 java에는 부분 문자열을 가지고 오는 함수가 있습니다. 각각 substr과, substring이에요. 예를 들어, 어떠한 문자열 str = "chogahui"가 있고, 1번째부터 3번째까지 가지고 온 부분 문자열 sub = "hog"일 거에요. 이걸 가지고 오는 함수를 string.h에서는 찾기가 힘듭니다. 그러면 이것을 어떻게 구현해야 할지, 생각해 봅시다. 사실 핵심적인 것은 간단합니다. 어떠한 시작 위치에서부터 t개 만큼을 어딘가로 복사한다. 만약에 문자열 str에서 [s,e)까지의 부분 문자열을 복사한다면 e-s개를 어딘가로 복사를 하는 것입니다. 그러면, 문자열을 복사를 하는데, 시작 위치로부터 t개만큼 copy 하는 함수를 찾으면 되는데요. 그것이 strncpy 함수입니다. cha..
최근댓글