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_t는 unsigned 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
복사