Пример #1
0
char* hw_expandtabs (const char *str, size_t tabsize) {
	char *ptr2, *ptr3;
	const char *ptr1;
	ptr1 = NULL;
	ptr2 = NULL;
	ptr3 = NULL;
	int n, t = 0;
	if (str != NULL) {
		ptr1 = str;
		t = 0;
		for (n = 0; n < hw_strlen(ptr1); n++, ptr1++) {
			if (*ptr1 == '\t')
				t++;
		}
		ptr1 = str;
		ptr2 = (char *) malloc(sizeof(char) * hw_strlen(str) + (int)tabsize * t);
		ptr3 = ptr2;
		for (n = 0; *ptr1 != '\0'; ptr1++) {
			if (*ptr1 == '\t') {
				t = 0;
				while (t < (int)tabsize) {
					*ptr3 = ' ';
					t++;
					ptr3++;
				}
			}
			else {
				*ptr3 = *ptr1;
				ptr3++;
			}
		}
		*ptr3 = '\0';
	}
	return ptr2;
}
Пример #2
0
Файл: hw8.c Проект: gmlin/cse220
char* hw_expandtabs(const char *str, size_t tabsize) {
	int i;
	int tab_count = 0;
	char *expanded_str;
	int position = 0;
	int j;
	if (str == NULL) {
		return 0;
	}
	for (i = 0; i < hw_strlen(str); i++) {
		if (*(str + i) == '\t') {
			tab_count++;
		}
	}
	expanded_str = malloc(hw_strlen(str) - tab_count + tab_count * (int)tabsize + 1);
	if (expanded_str == NULL) {
		return NULL;
	}
	for (i = 0; i < hw_strlen(str); i++) {
		if (*(str + i) == '\t') {
			for (j = 0; j < (int)tabsize; j++) {
				printf("j: %d\n", j);
				*(expanded_str + position + j) = ' ';
			}
			position += (int)tabsize;
		}
		else {
			*(expanded_str + position) = *(str + i);
			position++;
		}
	}
	*(expanded_str + position) = '\0';
	return expanded_str;
}
Пример #3
0
Файл: hw8.c Проект: gmlin/cse220
int hw_equalsIgnoreCase(const char *str1, const char *str2) {
	int i;
	if (str1 == NULL || str2 == NULL) {
		return 0;
	}
	if (hw_strlen(str1) != hw_strlen(str2)) {
		return 0;
	}
	for (i = 0; i < hw_strlen(str1); i++) {
		if (*(str1 + i) >= 'a' && *(str1 + i) <= 'z') {
			if (*(str1 + i) != *(str2 + i) && *(str2 + i) - *(str1 + i) != 'A' - 'a') {
				return 0;
			}
		}
		else if (*(str1 + i) >= 'A' && *(str1 + i) <= 'Z') {
			if (*(str1 + i) != *(str2 + i) && *(str1 + i) - *(str2 + i) != 'A' - 'a') {
				return 0;
			}
		}
		else {
			if (*(str1 + i) != *(str2 + i)) {
				return 0;
			}
		}
	}
	return 1;
}
Пример #4
0
Файл: hw8.c Проект: gmlin/cse220
int hw_strcmp(const char *str1, const char *str2) {
	int i;
	if (str1 == NULL || str2 == NULL) {
		return 0;
	}
	if (hw_strlen(str1) != hw_strlen(str2)) {
		return 0;
	}
	for (i = 0; i < hw_strlen(str1); i++) {
		if (*(str1++) != *(str2++)) {
			return 0;
		}
	}
	return 1;
}
Пример #5
0
Файл: hw8.c Проект: gmlin/cse220
char* hw_strncpy(char *dst, const char *src, size_t n) {
	int i;
	if (dst == NULL || src == NULL) {
		return NULL;
	}
	if (n >= hw_strlen(src)) {
		for (i = 0; i < hw_strlen(src); i++) {
			*(dst + i) = *(src + i);
		}
		*(dst + i) = '\0';
	}
	else {
		for (i = 0; i < n; i++) {
			*(dst + i) = *(src + i);
		}
		*(dst + i) = '\0';
	}
	return dst;
}
Пример #6
0
Файл: hw8.c Проект: gmlin/cse220
void hw_replaceall(char *str, const char *pattern, char replacement) {
	int i;
	if (str == NULL || pattern == NULL) {
		return;
	}
	for (i = 0; i < hw_strlen(str); i++) {
		if (hw_indexof(pattern, *(str + i)) != -1) {
			*(str + i) = replacement;
		}
	}
}
Пример #7
0
Файл: hw8.c Проект: gmlin/cse220
int hw_indexof(const char *str, char c) {
	int i;
	if (str == NULL) {
		return -1;
	}
	for (i = 0; i < hw_strlen(str); i++) {
		if (*(str + i) == c) {
			return i;
		}
	}
	return -1;
}
Пример #8
0
Файл: hw8.c Проект: gmlin/cse220
void hw_reversestr(char *str) {
	int i;
	int j;
	char c;
	if (str == NULL) {
		return;
	}
	i = 0;
	j = hw_strlen(str) - 1;
	while (i < j) {
		c = *(str + i);
		*(str + i) = *(str + j);
		*(str + j) = c;
		i++;
		j--;
	}
}
Пример #9
0
int hw_findAndReplace (char **dst, const char *str, const char *find_str, const char* replace_str) {
	const char *ptr, *findPtr;
	char *answer = NULL, *ptr2;
	ptr = str;
	findPtr = find_str;
	int m, o = 0, n = 0, c = 0;
	if (str != NULL && dst != NULL && find_str != NULL && replace_str != NULL) {
		while (*ptr != '\0') {
			if (*ptr == *find_str) {
				while (c < hw_strlen(findPtr)) {
					if (*ptr == *findPtr) {
						m = 1;
						ptr++;
						findPtr++;
						c++;
					}
					else {
						m = 0;
						ptr++;
						findPtr++;
						break;
					}
				}
				ptr -= o;
				if (m == 1) {
					o++;
				}
			}
			c = 0;
			findPtr = find_str;
			ptr++;
		}

		answer = (char *) malloc(sizeof(char) * hw_strlen(str) - (o * (hw_strlen(find_str) + hw_strlen(replace_str))));
		ptr = str;
		char *myPtr;
		char *replaceStr;
		ptr2 = answer;
		findPtr = find_str;
		n = 0;
		c = 0;
		while (*ptr != '\0') {
			replaceStr = (char*) replace_str;
			myPtr = (char*) ptr;
			if (*myPtr == *findPtr) {
				c = 0;
				findPtr = find_str;
				while (c < hw_strlen(findPtr)) {
					if (*myPtr == *findPtr) {
						m = 1;
						myPtr++;
						findPtr++;
						ptr++;
						c++;
					}
					else {
						m = 0;
						ptr++;
						break;
					}
				}
				replaceStr = (char*) replace_str;
				if (m == 1) {
					c = 0;
					while (c < hw_strlen(replace_str)) {
						*ptr2 = *replaceStr;
						ptr2++;
						replaceStr++;
						c++;
					}
					ptr += hw_strlen(find_str)-1;
				}
				else {
					*ptr2 = *ptr;
					ptr2++;
					ptr++;
				}
			}
			else {
				*ptr2 = *ptr;
				ptr2++;
				ptr++;
				replaceStr = (char*) replace_str;
			}
		}
	}
	*dst = answer;
	return o;
}
Пример #10
0
Файл: hw8.c Проект: gmlin/cse220
int ec_findAndReplace(char **dst, const char *str, const char *find_str,
const char* replace_str) {
	int i;
	int count = 0;
	int j;
	int position = 0;
	if (str == NULL || find_str == NULL || replace_str == NULL) {
		return 0;
	}
	for (i = 0; i < hw_strlen(str) - hw_strlen(find_str) + 1; i++) {
		for (j = 0; j < hw_strlen(find_str); j++) {
			if (*(str + i + j) != *(find_str + j) && !(*(find_str + j) == '*' && *(str + i + j) != ' ')) {
				break;
			}
			if (j == hw_strlen(find_str) - 1) {
				count++;
				i += hw_strlen(find_str) - 1;
				break;
			}
		}
	}
	*dst = malloc(hw_strlen(str) + count * (hw_strlen(replace_str) - hw_strlen(find_str)) + 1);
	if (*dst == NULL) {
		return 0;
	}
	for (i = 0; i < hw_strlen(str); i++) {
		if (i < hw_strlen(str) - hw_strlen(find_str) + 1) {
			for (j = 0; j < hw_strlen(find_str); j++) {
				if (*(str + i + j) != *(find_str + j) && !(*(find_str + j) == '*' && *(str + i + j) != ' ')) {
					*(*dst + position) = *(str + i);
					position++;
					break;
				}
				if (j == hw_strlen(find_str) - 1) {
					hw_strncpy(*dst + position, replace_str, hw_strlen(replace_str));
					i += hw_strlen(find_str) - 1;
					position += hw_strlen(replace_str);
					break;
				}
			}
		}
		else {
			*(*dst + position) = *(str + i);
			position++;
		}
	}
	*(*dst + position) = '\0';
	return count;
}
Пример #11
0
Файл: hw8.c Проект: gmlin/cse220
void hw_swapTokens(char *str, size_t i, size_t j, const char
*delimiters) {
	char *buffer;
	int k;
	char **tokens;
	int num_tokens = 0;
	char *temp;
	int position = 0;
	int tokens_placed = 0;
	if (str == NULL ||  delimiters == NULL || i < 0 || j < 0) {
		return;
	}
	buffer = malloc(hw_strlen(str) + 1);
	if (buffer == NULL) {
		return;
	}
	for (k = 0; k < hw_strlen(str); k++) {
		if (hw_indexof(delimiters, *(str + k)) != -1) {

			*(buffer + k) = *delimiters;
		}
		else {
			*(buffer + k) = *(str + k);
		}
	}
	*(buffer + k) = '\0';
	tokens = hw_split(buffer, *delimiters);
	while (*(tokens + num_tokens) != '\0') {
		num_tokens++;
	}
	if ((int)i >= num_tokens || (int)j >= num_tokens) {
		free(buffer);
		buffer = NULL;
		free(tokens);
		tokens = NULL;
		return;
	}
	else {
		temp = tokens[(int)i];
		tokens[(int)i] = tokens[(int)j];
		tokens[(int)j] = temp;
		for (k = 0; k < hw_strlen(str); k++) {
			if (k == 0 && hw_indexof(delimiters, *str) == -1) {
				if (tokens_placed < num_tokens) {
					hw_strncpy(buffer + position, tokens[tokens_placed], hw_strlen(tokens[tokens_placed]));
					position += hw_strlen(tokens[tokens_placed]);
					tokens_placed++;
				}
			}
			else if (hw_indexof(delimiters, *(str + k)) != -1) {
				*(buffer + position) = *(str + k);
				position++;
				if (k < hw_strlen(str) - 1 && hw_indexof(delimiters, *(str + k + 1)) == -1) {
					if (tokens_placed < num_tokens) {
						hw_strncpy(buffer + position, tokens[tokens_placed], hw_strlen(tokens[tokens_placed]));
						position += hw_strlen(tokens[tokens_placed]);
						tokens_placed++;
					}
				}
			}
		}
		*(buffer + position) = '\0';
		hw_strncpy(str, buffer, hw_strlen(str));
		free(buffer);
		buffer = NULL;
		free(tokens);
		tokens = NULL;
	}
}