#include <stdio.h>
//-----------------------------------------------------------------------------
int isAlnum(int ch) {
return ((('a' <= ch) && (ch <= 'z'))
|| (('A' <= ch) && (ch <= 'Z'))
|| (('0' <= ch) && (ch <= '9')));
}
//-----------------------------------------------------------------------------
int getWord(char* str, char** begin, char** end) {
for (; *str && !isAlnum(*str); ++str) { ; }
*begin = str;
for (; *str && isAlnum(*str); ++str) { ; }
*end = str;
return (*end - *begin);
}
//-----------------------------------------------------------------------------
void strSet(char* str, char ch, unsigned size) {
while (size--) {
*str++ = ch;
}
}
//-----------------------------------------------------------------------------
int strCmp(const char* str1, const char* str2, int size) {
while (size && *str1 && *str2 && (*str1++ == *str2++)) {
size--;
}
return (size == 0);
}
//-----------------------------------------------------------------------------
int strLen(const char* str) {
const char* p;
for (p = str; *p; ++p) { ; }
return (p - str);
}
//-----------------------------------------------------------------------------
char* strChrRemove(char str[], char ch) {
int offs = 0;
char* p;
for (p = str; *p; ++p) {
if (*p == ch) {
offs++;
}
else {
*(p - offs) = *p;
}
}
*(p - offs) = 0;
return str;
}
//-----------------------------------------------------------------------------
char* wordRemove(char text[], const char word[]) {
const char REPLACED_CHAR = 1;
char* str = text, * begin, * end;
int len, lenWord = strLen(word);
while ((len = getWord(str, &begin, &end))) {
if ((len == lenWord) && strCmp(begin, word, len)) {
strSet(begin, REPLACED_CHAR, len);
}
str = end;
}
return strChrRemove(text, REPLACED_CHAR);
}
//-----------------------------------------------------------------------------
int main() {
char text[] = "this is program delete word 'program'.";
char word[] = "program";
printf("%s\n", wordRemove(text, word));
return 0;
}