[ create a new paste ] login | about

Link: http://codepad.org/7vRxMxF9    [ raw code | output | fork ]

ninwa - C, pasted on Sep 17:
#include <stdio.h>

#define _DEBUG_ 1
#define POOLSIZE 10000

static char pool[POOLSIZE];
static char *pool_ptr = pool;

char *myalloc(int);
void myfree(char *);
int mystrlen(char *);
void mystrcpy(char *, char *);
int mystrcmp(char *, char *);
char *mycat(const char *, char *);
int mystrend(char *, char);
char *mystrncpy(char *,char*,int);
int mystrncmp(const char *,const char *,int);
char *mystrncat(const char *, char *, int);
int myatoi(const char *, int *);
int myitoa(char *, int);
void swap(char *, char *);
char *myreverse(char *);
int mystrindex(const char *, char);

int main(int argc, char* argv[])
{
	char *ptr = myalloc(10);

	ptr[0] = 'H';
	ptr[1] = 'i';
	ptr[2] = ' ';
	ptr[3] = '\0';

	char *p2 = myalloc(10);

	p2[0] = 's';
	p2[1] = 'i';
	p2[2] = 'r';
	p2[3] = '.';
	p2[4] = '\0';

	printf("%s%s %d\n", ptr, p2, mystrlen(ptr));

	char cmp1[] = "Hello";
	char cmp2[] = "Hello";
	char cmp3[] = "Hello!";

	printf("strcmp(%s,%s) == %d\n", cmp1, cmp2, mystrcmp(cmp1,cmp2));
	printf("strcmp(%s,%s) == %d\n", cmp1, cmp3, mystrcmp(cmp1,cmp3));

	if(mystrend("Hello sir", 'r'))
		printf("'r' is in fact at the end of Hello Sir\n");
	else
		printf("What?\n");

	char cpyt[32];
	char *cpyf = "Hi! to you sir.";
	mystrncpy(cpyf, cpyt, 3);
	cpyt[3] = '\0';

	printf("Copying the first three elements: %s\n", cpyt);

	if(mystrncmp("abcccc", "abcddd",3) == 0)
		printf("mystrncmp passes test 1!\n");

	if(mystrncmp("abeccc", "abcddd",3) == 1)
		printf("mystrncmp passes test 2!\n");

	char foo[32] = "Hello ";
	mystrncat("World is going to explode!", foo, 5);
	printf("strncat: %s\n", foo);

	int val = 0;
	if(myatoi("15", &val) == 15)
		printf("myatoi passed %d\n", val);

	char numbuf[32];
	myitoa(numbuf, 3242);
	printf("numbuf: %s\n", numbuf);

	char reverseme[] = "Hello!!!";
	myreverse(reverseme);
	printf("reverse; %s\n", reverseme);

	printf("index of 'i' in 'Hi' is %d\n", mystrindex("Hi", 'i'));
	return 0;
}

int mystrindex(const char *s, char c)
{
	char *front = s;
	while(*s++)
		if(*s == c)
			return s - front;

	return -1;
}

int pow(int a, int b){
	int oa = a;
	a = 1;

	if(b == 0)
		return 1;

	while(b--)
		a *= oa;

	return a;
}

int myatoi(const char *s, int *val)
{
	int n = 0;

	do{
		if(*s >= '0' && *s <= '9'){
			n *= 10;
			n += *s - '0';
			s++;
		}
		else
			return 0;

	}while(*s);

	*val = n;

	return *val;
}

void swap(char *a, char *b)
{
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}

char *myreverse(char *c)
{
	char *front = c;
	while(*c)
		c++;
	c--;

	while(front < c){
		swap(front, c);
		c--;
		front++;
	}

	return c;
}

int myitoa(char *dest, int n)
{
	char *front = dest;

	if(n  < 0)
		*dest++ = '-';

	do{
		*dest++ = (n % 10) + '0';
		n /= 10;
	}while(n);

	*dest = '\0';

	myreverse(front);

	return dest-front + (front[0] == '-') ? 1 : 0;
}

char *mystrncat(const char *s, char *dest, int n)
{
	const char *cp = s;
	while(*dest++); /* reach the end of dest */
	while(n >= cp-s && dest++, (*(dest-2) = *cp++));
	*dest = '\0';
	return dest;
}

int mystrncmp(const char *a, const char *b, int n)
{
	const char *cmpp = a; /*comparison ptr*/
	while(n > cmpp - a && *a && *b)
		if(*cmpp++ != *b++)
			return 1;

	return 0;
}

char *mystrncpy(char *src, char *dest, int n)
{
	char *cp = src; /*copy ptr*/
	while(n > cp-src && *src){
		*dest++ = *cp++;
	}

	return dest;
}

int mystrend(char *target, char c)
{
	while(*target++);
	if(c == *(target-2))
		return 1;

	return 0;
}

char *mycat(const char *str, char *dest)
{
	char *p = dest;
	while(*(dest))
		++dest;
	while((*(dest++) = *(str++)));
	return p;
}

int mystrcmp(char *a, char *b)
{
	while(*a && *a++ == *b++);

	if(*a == *b)
		return 0;

	return 1;
}

void mystrcpy(char *src, char *dest)
{
	while((*dest++ = *src++));
}

int mystrlen(char *s)
{
	char *start = s;
	while(*s++);
	return s - start;
}

char *myalloc(int size)
{
	if(pool + POOLSIZE - pool_ptr >= size){
		pool_ptr += size;
		return pool_ptr - size;
	}

	return 0;
}

void myfree(char *target)
{
	if(target >= pool && target < pool + POOLSIZE)
		pool_ptr = target;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
Hi sir. 4
strcmp(Hello,Hello) == 0
strcmp(Hello,Hello!) == 1
'r' is in fact at the end of Hello Sir
Copying the first three elements: Hi!
mystrncmp passes test 1!
mystrncmp passes test 2!
strncat: Hello World
myatoi passed 15
numbuf: 3242
reverse; !!!olleH
index of 'i' in 'Hi' is 1


Create a new paste based on this one


Comments: