[C] 기본적 String 함수 구현
몇 개의 기본 함수를 구현해보자.
#include <string.h>
위 코드를 통해서 string과 관련된 내장함수를 불러올 수 있다.
이들의 일부 중 아래와 같은 함수가 있으며 직접 구현해 볼 수 있다.
- 문자열을 역순으로 출력하는 함수
- 문자열 중 소문자 알파벳을 대문자 알파벳으로 변환하는 함수
- 문자열 중 대문자 알파벳을 소문자 알파벳으로 변환하는 함수
- 문자열의 길이를 반환하는 함수(strlen)
- 두 문자열을 서로 연결하는 함수(strcat)
- 두 문자열을 서로 비교하는 함수(strcmp)
문자열을 역순으로 출력하는 함수
void strRev(char *in) {
int len = strlen(in);
char temp;
for (int i = 0; i < len / 2; i++) {
// len / 2가 아니라 len으로 할 경우 다시 원위치가 되어버리는 현상 발생.
temp = in[len-i-1];
in[len-i-1] = in[i];
in[i] = temp;
}
}
문자열 중 소문자 알파벳을 대문자 알파벳으로 변환하는 함수
void strUpper(char *in) {
int len = strlen(in);
for (int i = 0; i < len; i++) {
if (in[i] >= 'a' && in[i] <= 'z') {
in[i] -= 32;
}
}
}
문자열 중 대문자 알파벳을 소문자 알파벳으로 변환하는 함수
void strLower(char *in) {
int len = strlen(in);
for (int i = 0; i < len; i++) {
if (in[i] >= 'A' && in[i] <= 'Z') {
in[i] += 32;
}
}
}
문자열의 길이를 반환하는 함수(strlen)
int strlength(char* str) {
int i;
for (i = 0; str[i] != '\0' ; i++) {
// i++을 쓰는 순간 위에서도 i가 ++되고 여기서도 i가 ++돼서
// 2씩 더해지는 현상이 발생해버린다. 그러므로 여기는 비워주자.
}
return i;
}
두 문자열을 서로 연결하는 함수(strcat)
직접 구현하는 코드에서는 strcapt라고 표기하였다.
void strcapt(char* s, char* b);
int main() {
char str[255] = "Happy";
char buf[255] = " birthday";
// strcat(str, buf);
// 두 문자열을 서로 연결한다.
// str 자리의 null문자를 찾아서 그 자리에다가 buf를 그대로 이어 붙이는 원리.
strcapt(str, buf);
printf("str = %s\n", str); // Happy birthday
printf("buf = %s\n", buf); // birthday
return 0;
}
void strcapt(char* s, char* b) {
int i;
for (i = 0; s[i] != '\0' ; i++) {
}
// 사실 위 코드는 int i = strlen(s); 로 축약 가능.
for (int c = 0; b[c] != '\0' ; c++) {
s[i] = b[c];
i++;
// s[i+c] = b[c]; 로 축약 가능.
}
}
두 문자열을 서로 비교하는 함수(strcmp)
//strcmp함수 직접 구현.
int strCompare(char* s, char* b) {
int len;
// 긴 문자열의 길이 만큼 반복하는 작업이 필요.
if (strlen(s) >= strlen(b)) {
len = strlen(s);
}
else {
len = strlen(b);
}
for (int i = 0; i < len ; i++) {
if (s[i] != b[i]) {
if (s[i] > b[i]) {
return 1;
}
else {
return -1;
}
}
}
return 0;
}