finished
This commit is contained in:
parent
10ec7e7060
commit
928dfc455c
2 changed files with 101 additions and 2 deletions
101
trim.c
101
trim.c
|
|
@ -2,9 +2,108 @@
|
||||||
* HTBLA-Leonding
|
* HTBLA-Leonding
|
||||||
* ---------------------------------------------------------
|
* ---------------------------------------------------------
|
||||||
* Title: Trim String
|
* Title: Trim String
|
||||||
* Author: */<your name>;/*
|
* Author: Marc Tismonar
|
||||||
* ----------------------------------------------------------
|
* ----------------------------------------------------------
|
||||||
* Description:
|
* Description:
|
||||||
* Implementation of 'trim' functionality.
|
* Implementation of 'trim' functionality.
|
||||||
* ----------------------------------------------------------
|
* ----------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "trim.h"
|
||||||
|
|
||||||
|
// private functions
|
||||||
|
bool is_whitespace(char c) {
|
||||||
|
return c == ' ' || c == '\t' || c == '\n' || c == '\r';
|
||||||
|
}
|
||||||
|
|
||||||
|
void shift(char* string, int start, int end) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i <= end - start; i++) {
|
||||||
|
string[i] = string[i + start];
|
||||||
|
}
|
||||||
|
string[i] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
void override_all(char* string) {
|
||||||
|
for (int i = 0; i < strlen(string); i++) {
|
||||||
|
string[i] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides the trimmed string WITHOUT making a copy
|
||||||
|
* of the source string.
|
||||||
|
* Trimming means that leading and trailing whitespace
|
||||||
|
* characters are removed.
|
||||||
|
*
|
||||||
|
* Whitespace characters are:
|
||||||
|
* - space (' '),
|
||||||
|
* - tabulator ('\t')
|
||||||
|
* - new line ('\n')
|
||||||
|
* - line feed ('\r')
|
||||||
|
* @param string The string to be trimmed.
|
||||||
|
* @return The trimmed string.
|
||||||
|
*/
|
||||||
|
char* trim(char* string) {
|
||||||
|
if (string == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int start = 0;
|
||||||
|
while (string[start] != '\0' && is_whitespace(string[start])) {
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if empty or only whitespace
|
||||||
|
if (string[start] == '\0') {
|
||||||
|
string[0] = '\0';
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
int end = strlen(string) - 1;
|
||||||
|
while (end > start && is_whitespace(string[end])) {
|
||||||
|
end--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// shift
|
||||||
|
if (start > 0) {
|
||||||
|
shift(string, start, end);
|
||||||
|
} else {
|
||||||
|
string[end + 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides the trimmed string as COPY of the source string.
|
||||||
|
* Trimming means that leading and trailing whitespace
|
||||||
|
* characters are removed.
|
||||||
|
*
|
||||||
|
* Whitespace characters are:
|
||||||
|
* - space (' '),
|
||||||
|
* - tabulator ('\t')
|
||||||
|
* - new line ('\n')
|
||||||
|
* - line feed ('\r')
|
||||||
|
* @param string The string to be trimmed.
|
||||||
|
* @param trimmed_string Container which takes the trimmed
|
||||||
|
* version of source. This function expects a buffer that
|
||||||
|
* is large enough for carrying the trimmed string.
|
||||||
|
*/
|
||||||
|
void trim_cpy(char* string, char* trimmed_string) {
|
||||||
|
if (string == 0 || trimmed_string == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(string) == 0) {
|
||||||
|
trimmed_string[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
override_all(trimmed_string);
|
||||||
|
trimmed_string = strncpy(trimmed_string, string, strlen(string));
|
||||||
|
trimmed_string = trim(trimmed_string);
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
* HTBLA-Leonding
|
* HTBLA-Leonding
|
||||||
* ---------------------------------------------------------
|
* ---------------------------------------------------------
|
||||||
* Title: Trim String
|
* Title: Trim String
|
||||||
* Author: */<your name>;/*
|
* Author: Marc Tismonar
|
||||||
* ----------------------------------------------------------
|
* ----------------------------------------------------------
|
||||||
* Description:
|
* Description:
|
||||||
* Application entry point for 'trim'.
|
* Application entry point for 'trim'.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue