Skip to content

Instantly share code, notes, and snippets.

@DivinityArcane
Created December 20, 2012 02:43
Show Gist options
  • Save DivinityArcane/4342536 to your computer and use it in GitHub Desktop.
Save DivinityArcane/4342536 to your computer and use it in GitHub Desktop.
#include <stdio.h>
size_t strlen(const char *__s);
char* strstr(const char *__haystack, const char *__needle);
char* strcpy(char* __dest, const char* __src);
char* strncpy(char* __dest, const char* __src, size_t __n);
void* malloc(size_t __size);
void* memcpy(void* __dest, const void* __src, size_t __n);
// This is supposed to be simple, no negative positions, etc.
char* substr(char* haystack, int start, int length) {
if (length >= strlen(haystack) || start >= strlen(haystack) || start < 0) {
return NULL;
} else {
char* haybale = malloc(length + 1);
if (NULL == haybale) {
return NULL;
} else {
memcpy(haybale, &(haystack[start]), length);
return haybale;
}
}
}
char* str_replace(const char* haystack, const char* needle, const char* replace) {
int matchCount, hayLen = strlen(haystack), needleLen = strlen(needle), repLen = strlen(replace);
const char *hsPtr, *hbPtr;
for (hsPtr = haystack; (hbPtr = strstr(hsPtr, needle)); hsPtr = hbPtr + needleLen) {
matchCount++;
}
int diffLen = 0;
if (repLen > needleLen) {
diffLen += (repLen - needleLen);
} else {
diffLen -= (needleLen - repLen);
}
char* haybale = (char*)malloc(sizeof(char) * hayLen + diffLen);
if (NULL != haybale) {
char* hbbPtr = haybale;
for (hsPtr = haystack; (hbPtr = strstr(hsPtr, needle)); hsPtr = hbPtr + needleLen) {
int gapLen = hbPtr - hsPtr;
strncpy(hbbPtr, hsPtr, gapLen);
hbbPtr += gapLen;
strncpy(hbbPtr, replace, repLen);
hbbPtr += repLen;
}
strcpy(hbbPtr, hsPtr);
}
return haybale;
}
int main(int argc, char* argv[]) {
char* test = "this is a &lt;test&gt;";
test = str_replace(test, "&lt;", "<");
if (NULL == test) {
puts("Failed!");
return 0;
}
test = str_replace(test, "&gt;", ">");
if (NULL == test) {
puts("Failed!");
return 0;
}
puts(test);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment