/*
* string_manip.c
* Wcalc
*
* Created by Kyle Wheeler on Fri Mar 01 2002.
* Copyright (c) 2001 Kyle Wheeler. All rights reserved.
*
*/
#include <ctype.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "string_manip.h"
#if ! defined(HAVE_CONFIG_H) || HAVE_STRING_H
# include <string.h>
#else
# if !HAVE_STRCHR
# define strchr index
# define strrchr rindex
# endif
char *strchr(), *strrchr();
#endif
#ifdef MEMWATCH
#include "memwatch.h"
#endif
void strstrip(const char strip, char *str)
{
char *left, *right;
for (left = right = str; *right; ++right) {
if (right && *right && *right != strip) {
*left = *right;
++left;
}
}
while (left != right) {
*left = 0;
++left;
}
}
void strswap(const char sw, const char ap, char *str)
{
size_t curs = 0;
if (!str) return;
while (str[curs]) {
if (str[curs] == sw)
str[curs] = ap;
++curs;
}
}
void strswap2(const char sw, const char ap, char *str)
{
size_t curs = 0;
if (!str) return;
while (str[curs]) {
if (str[curs] == sw)
str[curs] = ap;
else if (str[curs] == ap)
str[curs] = sw;
++curs;
}
}
unsigned int count_digits(const char *str)
{
size_t curs = 0;
unsigned int counter = 0;
char base = 10;
char * exponent_chars = "eE";
char * base_chars = "1234567890";
if (!str) return 0;
if (str[0] == '0' && str[1] == 'x') {
base = 16;
curs += 2;
exponent_chars = "@";
base_chars = "1234567890abcdefABCDEF";
} else if (str[0] == '0' && str[1] == 'b') {
base = 2;
curs += 2;
exponent_chars = "eE";
base_chars = "01";
} else if (str[0] == '0') {
base = 8;
curs += 1;
exponent_chars = "eE";
base_chars = "12345670";
}
while (str[curs] && strchr(exponent_chars, str[curs]) == NULL) {
if (strchr(base_chars, str[curs]) != NULL) {
counter ++;
}
++curs;
}
return counter;
}
int justnumbers(const char *str)
{
size_t curs = 0;
if (!str) return 0;
while (str[curs] && (isdigit((int)(str[curs])) || ispunct((int)(str[curs]))))
curs++;
if (!str[curs]) // if we reached the end of the string
return 1;
else
return 0;
}
void stripComments(char *str)
{
size_t curs = 0;
size_t follower = 0;
char update_follower = 1;
if (!str) return;
while (str[curs] != '\0') {
if (str[curs] == '#') {
str[curs] = 0;
return;
} else if (str[curs] == '/' && str[curs + 1] == '/') {
str[curs] = 0;
return;
} else if (str[curs] == '/' && str[curs + 1] == '*') {
update_follower = 0;
curs++;
} else if (str[curs] == '*' && str[curs + 1] == '/') {
update_follower = 1;
curs += 2;
}
if (update_follower) {
str[follower] = str[curs];
follower++;
}
curs++;
}
str[follower] = 0;
}
syntax highlighted by Code2HTML, v. 0.9.1