Carlos Konstanski wrote:
> I have a C++ function I'm writing; see below. I'm new to C++, and the
> implementation details tend to bite me where the sun don't shine
> whenever they can.
>
> The function works as intended. But later attempts to use the value
> that I passed in as rawInput cause an error in Visual C++. GNU C++
> does not give me any error. Nevertheless, I think that there must be a
> problem here. I suspect that the pointer charSequence must need to be
> freed. But I cannot find any way to do this that compiles.
>
> Is this my problem? If so, how do I free charSequence?
>
> Carlos
>
>
> bool numericP(string rawInput) {
> bool legalCharsP = true;
> int numDecimalPoints = 0;
> int i = 0;
> const char *charSequence = rawInput.c_str();
> while(i < rawInput.size() && legalCharsP && numDecimalPoints <= 1) {
> // the first char can be a -, ., or a digit; all others must
> // be a . or a digit; but there can be only one or less .'s
> if(! ((i == 0 && charSequence[i] == 0x2d) ||
> ((charSequence[i] >= 0x30 && charSequence[i] <= 0x39) ||
> charSequence[i] == 0x2e))) {
> legalCharsP = false;
> } else if(charSequence[i] == 0x2e) {
> numDecimalPoints++;
> }
> i++;
> }
> return (legalCharsP && numDecimalPoints <= 1);
> }
>
You are extracting individual characters out of rawInput by getting a
pointer to a character array, then getting characters 'the C way'.
Yet the string class has a character extraction operator -- why not just
use rawInput[i], or rawInput.at(i)?
--
Tim Wescott
Wescott Design Services
Voice: 503-631-7815
Cell: 503-349-8432
http://www.wescottdesign.com
_______________________________________________
PLUG mailing list
[email protected]
http://lists.pdxlinux.org/mailman/listinfo/plug