'C/string processing'에 해당되는 글 1건

  1. 2011.01.09 string processing

string processing

|
#include <stdio.h>

#define TRUE    1
#define FALSE   0

void disp(char ch, int (*fp)(char)) {
        if (fp(ch)) printf("TRUE\n");
        else printf("FALSE\n");
}

int myisalnum(char ch) {
        if ((ch >= 'a' && ch <= 'z') ||
                        (ch >= 'A' && ch <= 'Z') ||
                        (ch >= '0' && ch <= '9')) {
                return TRUE;
        } else {
                return FALSE;
        }
}

int mystrlen(const char* str)
{
        int i;
        for (i = 0; str[i] != '\0'; ++i);

        return i;
}

int mystrcpy(char* buf, const char* str)
{
        int i;
        for (i = 0; str[i] != '\0'; ++i) {
                buf[i] = str[i];
        }
        buf[i] = '\0';

        return i;
}

int mystrcat(char *buf, const char* str)
{
        int i;
        int j;
        for (i = 0; buf[i] != '\0'; ++i); //최종적으로 i는 '\0'의 위치에 있음 (buf[i] == '\0')
        for (j = 0; str[j] != '\0'; ++i, ++j) {
                buf[i] = str[j];
        }
        buf[i] = '\0';

        return j;
}

int mystrrev(char *str)
{
        int i;
        int len;
        char temp;

        for (i = 0; str[i] != '\0'; ++i); //i는 문자열의 길이가 됨
        len = i;
        //printf("%d\n", len);

        for (i = 0; i < len / 2; ++i) {
                temp = str[i];
                str[i] = str[len - i - 1];
                str[len - i - 1] = temp;
        }
        str[len] = '\0';

        //debug start
        printf("mystrrev debug : ");
        for (i = 0; str[i] != '\0'; ++i) {
                printf("%c", str[i]);
        }

        if (str[i] == '\0') printf("NULL\n");
        //debuf end

        return i;
}

int mystrcmp(char *str1, char *str2)
{
        int i;
        int len1, len2;
        int len;

        for (i = 0; str1[i] != 0; ++i);
        len1 = i;

        for (i = 0; str2[i] != 0; ++i);
        len2 = i;

        //긴 문자열의 길이를 구한다.
        len = (len1 > len2) ? len1 : len2;

        for (i = 0; i < len; ++i) {
                //같은 위치의 문자를 비교한다.
                if (str1[i] > str2[i]) {
                        return 1;
                } else if (str1[i] < str2[i]) {
                        return -1;
                }

                //둘 중 하나가 '\0'이 되면 앞의 문자들이 모두 같다는 것이다.
                if (str2[i] == '\0') {
                        return 1;
                } else if (str1[i] == '\0') {
                        return -1;
                }
        }

        return 0;
}

int main()
{
        int i;
        int (*fp[2])(char);

        char *str;
        char dest[10];
        char rstr[] = "abcdef";

        fp[0] = myisalnum;
        fp[1] = myisalnum;
        for (i = 0; i < 2; ++i) {
                disp('/', fp[i]);
        }

        str = "abc";
        i = mystrlen(str); //3
        printf("mystrlen : [%s] %d\n", str, i);
        i = mystrlen("\0"); //0
        printf("mystrlen : [%s] %d\n", str, i);

        mystrcpy(dest,str);
        printf("mystrcat : dest [%s]\n", dest);

        str = "def";
        mystrcat(dest, str);
        printf("mystrcat : dest [%s]\n", dest);

        mystrrev(rstr);
        printf("mystrrev : %s\n", rstr);

        i = mystrcmp("abc", "abc");
        printf("mystrcmp : %d\n", i);

        return 0;
}

And
prev | 1 | next