This commit is contained in:
MarcUs7i 2025-02-09 12:34:05 +01:00
parent 10ec7e7060
commit 928dfc455c
2 changed files with 101 additions and 2 deletions

101
trim.c
View file

@ -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);
}

View file

@ -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'.