Select Git revision
questions.md
stringfun.c 4.75 KiB
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define BUFFER_SZ 50
// Prototypes
void usage(char *);
void print_buff(char *);
int setup_buff(char *, char *, int);
int count_words(char *, int);
void reverse_buffer(char *);
void print_words(char *);
int search_replace(char *, char *, char *);
// Helper function: Clean spaces
void clean_spaces(char *buff, int *len) {
char *src = buff, *dst = buff;
int in_space = 0;
while (*src) {
if (isspace(*src)) {
if (!in_space) {
*dst++ = ' ';
in_space = 1;
}
} else {
*dst++ = *src;
in_space = 0;
}
src++;
}
// Remove trailing space
if (dst > buff && isspace(*(dst - 1))) {
dst--;
}
*dst = '\0';
*len = strlen(buff);
}
// Setup buffer
int setup_buff(char *buff, char *user_str, int len) {
if (!buff || !user_str) {
return -1;
}
int user_str_len = strlen(user_str);
if (user_str_len >= len) {
memcpy(buff, user_str, len - 1);
buff[len - 1] = '\0';
} else {
strcpy(buff, user_str);
memset(buff + user_str_len, '.', len - user_str_len);
}
return strlen(buff);
}
// Print buffer
void print_buff(char *buff) {
printf("Buffer: [");
for (int i = 0; i < BUFFER_SZ; i++) {
putchar(buff[i] ? buff[i] : '.');
}
printf("]\n");
}
// Word counting
int count_words(char *buff, int str_len) {
if (!buff || str_len <= 0) {