Posted by 인뜨라야
#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;
}
#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;
}