Change
February 28, 2011 2 Comments
Never thought people (me for that matter) change so quickly. Not long ago I posted here about how I don’t enjoy computers much but just barely make up with them. Yesterday I had to travel to my parents and I was shocked at how badly I was bored when I was not coding. I had to stop listening to music and open a terminal and start coding. I guess when one does something everyday, it becomes difficult to hate it (arranged marriages?
). Wanted to start on a task which I could complete so wrote the complete code for reversing all the words in a given string (ya ya … I know .. I know its too easy
).
Re-wrote all the library functions, have to confirm their behaviour though
. Do let me know if there are any obvious/major bugs.
#include <stdio.h>
#include <stdlib.h>
#define _DEBUG_HAULT_ scanf("%*d");
#define STR_TERM '\0'
#define MAX_INPUT_LENGTH 1000
#define DELIMITERS " ,.':;"
int my_strlen(const char* str) {
register int len = -1;
for (;*(str + ++len););
return len;
}
char* my_strchr(const char* s, int ch) {
if (NULL == s) return NULL;
for (; STR_TERM != *s && *s != ch; ++s);
return STR_TERM == *s ? NULL : (char *)s;
}
char* my_strrev(const char* str, register int l) {
register int i = -1;
char *retVal = (char *)malloc(sizeof(char) * l);
retVal[0] = retVal[l] = STR_TERM;
for (; l; retVal[++i] = str[--l]);
return retVal;
}
char* my_strtok(char *buf, const char* delim) {
static char* record;
record = (buf == NULL) ? record : buf;
if (*record == STR_TERM || NULL == record) return NULL;
char* temp = record;
while ((STR_TERM != *record) && (NULL == my_strchr(delim, *record))) {
++record;
}
if (STR_TERM == *record) return temp;
while ((STR_TERM != *record) && (NULL != my_strchr(delim, *record))) {
*record = STR_TERM;
++record;
}
return temp;
}
// Removes all the punctuations (marked in constant DELIMITERS) and inserts
// only 1 space between words.
int main(int argc, char *argv[]) {
char input[MAX_INPUT_LENGTH], output[MAX_INPUT_LENGTH];
input[0] = output[0] = STR_TERM;
scanf("%[^\n]", input);
register int len = 0, temp = 0;
register char* ptr = NULL;
for (ptr = my_strtok(input, DELIMITERS);
ptr;
ptr = my_strtok(NULL, DELIMITERS)) {
temp = my_strlen(ptr);
sprintf(output + len, "%s ", my_strrev(ptr, temp));
len += (temp + 1);
}
output[len - 1] = STR_TERM;
printf("%s\n", output);
printf("%s\n", my_strrev(output, my_strlen(output)));
return 0;
}
After I was done, I found out about strsep


Recent Activity