Category (Click)
개발보드 덕질하기

[2023 방통대 C 스터디] 10. [string.h] 파이썬은 되던데…

2023 방통대 C 스터디 강의노트
한국방송통신대학교 컴퓨터과학과의 C언어 스터디에 사용한 자료입니다.
배움은 끝이 없기에 강의노트라 하더라도 오류가 있을 수 있으며, 이 점에 대해서는 둥글게 지적 부탁드립니다.
읽기 전 아래 내용을 숙지하여주시기 바랍니다.
강의 노트에서 중요한 부분은 이렇게 노란색 전구()로 강조합니다.
한국어로 번역했을 때 뜻이 명확하지 않은 일부 용어는 의미를 분명히 하기 위해 한국어로 뜻을 번역하지 않고 영어 원문을 그대로 사용하거나 말음을 한국어로 표기합니다.
강의 노트는 스터디 내용을 대체할 수 없으며 이해를 위한 자세한 내용은 스터디에서 언급합니다.
강의 노트는 Light 테마에서 보시는것을 권장합니다.
스터디는 Windows 11, Visual Studio IDE 환경에서 진행합니다.
mac인 경우 패러렐즈를 이용해 Windows 11 ARM을 설치하여 동일하게 진행할 수 있습니다.
모든 강의 노트의 저작권은 작성자 차완기에게 있으며 무단 복제를 금합니다.

#방통대 2023 C 스터디 강의노트 태그 전체 글보기

C언어와 가장 많이 비교되는 파이썬은 모든 자료형이 객체(Objetc)로 구현되기 때문에 연산을 객체 내부의 메소드를 이용해 진행합니다. 예를 들어 문자열을 비교할 때 표면적으로는 is 라는 비교 연산자를 사용하지만 내부적으로는 str Class에 구현된 __eq__() 메소드가 작동하게 됩니다.
반면에 C언어에서는 문자열이 배열로 구현되어 문자열끼리 비교하기 위해서는 반복문을 만들어 직접 문자열의 내용 하나하나를 비교하여야 합니다.
왼쪽의 코드는 str1과 str2의 문자열을 비교하는 예제 코드입니다.
C언어에서는 모든 문자열의 마지막에 문자열을 끝을 알리는 NULL문자(\0)가 있음을 이용해 두 문자열 중 하나가 끝날 때 까지 문자열을 반복적으로 비교합니다.
이때 하나라도 값이 다르다면 문자열이 다른 것으로 판단하고, NULL문자를 만날 때 까지 다른 점을 찾지 못한다면 문자열이 같은 것으로 판단합니다.
문자열을 비교하는 위 예제 이외에도 문자열의 모든 연산에 반복문을 사용해야 하기 때문에 코드가 복잡해지게 됩니다. 이를 간단하게 해결하기 위한 문자열 연산 라이브러리 string.h의 주요 함수를 알아보도록 하겠습니다.
string.h에 입력되는 모든 문자열은 NULL로 끝나야 합니다. 이를 null-terminated라 합니다.

문자열 길이 출력 - strlen()

모든 문자열이 null-terminated라면 반복문을 이용해 NULL 문자가 존재할 때 까지 숫자를 더하면 NULL 문자를 포함한 문자열의 길이를 알아낼 수 있습니다.
size_t strlen(const char *str);
C
복사
str : 길이를 구하고자 하는 문자열의 포인터
반환값 : 문자열의 길이
반환값인 size_tunsigned long (uint32_t)입니다.
코드
코드
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
문자열의 길이는 12입니다.
Plain Text
복사

문자열 복사 - strcpy()

문자열을 다른 배열에 복사하기 위해서는 반복문을 이용해 NULL문자가 나올 때 까지 원본 문자열을 0번 위치부터 차례로 복사하면 됩니다.
char *strcpy(char *dest, const char *src);
C
복사
dest : 복사 대상 문자열 포인터
src : 복사 원본 문자열 포인터
반환값 : 복사가 완료된 문자열의 포인터
코드
코드
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
복사된 문자열: Hello World!
Plain Text
복사

문자열 이어붙이기 - strcat()

문자열을 이어붙일때에는 우선 이어붙일 대상의 마지막 지점을 NULL문자을 이용해 찾고 그 뒤에 이어붙이는 문자를 NULL문자가 나올 때 까지 복사하는 과정을 거칩니다.
char *strcat(char *dest, const char *src);
C
복사
dest : 이어붙이고자 하는 문자열 포인터
src : 이어붙일 문자열 포인터
반환값 : 문자열이 이어붙여진 후의 포인터
코드
코드
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Hello World!
Plain Text
복사

문자열 비교 - strcmp()

문자열 비교에 대해서는 앞에서 설명하였기 때문에 언급하지 않겠습니다.
int strcmp(const char *s1, const char *s2);
C
복사
s1 : 비교 대상 문자열1 포인터
s2 : 비교 대상 문자열2 포인터
반환값 : 두 문자열이 같으면 0, 다르면 음수 또는 양수 반환
코드
코드
위 소스코드의 출력값은 다음과 같습니다.
두 문자열은 다릅니다.
Plain Text
복사

특정 문자 찾기 - strchr()

문자열을 찾는다면 배열의 시작부터 끝(NULL)까지 반복하며 주어진 문자를 찾으면 됩니다.
char *strchr(const char *str, int c);
C
복사
str : 문자열 포인터
c : 찾고자 하는 문자
반환값 : 문자열에서 찾은 문자의 포인터. 없다면 NULL 반환
코드
코드
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
W가 문자열에서 6번째 위치에 있습니다.
Plain Text
복사

특정 문자열 찾기 - strstr()

문자열을 찾을 때에는 문자와 마찬가지로 시작부터 반복하면 되며 동일한 문자 시작점을 찾으면 찾는 문자열만큼 다시 반복하며 일치 여부를 확인하면 됩니다.
char *strstr(const char *haystack, const char *needle);
C
복사
haystack : 문자열 포인터
needle : 찾고자 하는 문자열 포인터
반환값 : 문자열에서 찾은 문자열의 포인터. 없다면 NULL 반환
코드
코드
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
문자열에서 'World'를 찾았습니다.
Plain Text
복사