[C] 기본적 String 함수 구현

몇 개의 기본 함수를 구현해보자.


#include <string.h>

위 코드를 통해서 string과 관련된 내장함수를 불러올 수 있다.

이들의 일부 중 아래와 같은 함수가 있으며 직접 구현해 볼 수 있다.

  1. 문자열을 역순으로 출력하는 함수
  2. 문자열 중 소문자 알파벳을 대문자 알파벳으로 변환하는 함수
  3. 문자열 중 대문자 알파벳을 소문자 알파벳으로 변환하는 함수
  4. 문자열의 길이를 반환하는 함수(strlen)
  5. 두 문자열을 서로 연결하는 함수(strcat)
  6. 두 문자열을 서로 비교하는 함수(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;
}

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2