diff --git a/conversion/stringconversion.h b/conversion/stringconversion.h index dbd6a48..d0ae62b 100644 --- a/conversion/stringconversion.h +++ b/conversion/stringconversion.h @@ -366,6 +366,8 @@ IntegralType stringToNumber(const StringType &string, typename StringType::value { auto i = string.begin(); auto end = string.end(); + for (; i != end && *i == ' '; ++i) + ; if (i == end) { return 0; } @@ -440,6 +442,11 @@ IntegralType stringToNumber(const CharType *string, unsigned char base = 10) if (!*string) { return 0; } + for (; *string && *string == ' '; ++string) + ; + if (!*string) { + return 0; + } const bool negative = (*string == '-'); if (negative) { ++string; diff --git a/tests/conversiontests.cpp b/tests/conversiontests.cpp index 248db68..bfd66b6 100644 --- a/tests/conversiontests.cpp +++ b/tests/conversiontests.cpp @@ -249,16 +249,18 @@ void ConversionTests::testStringConversions() } } - // stringToNumber() with leading zeroes and different types - int32 res = stringToNumber("01"); - CPPUNIT_ASSERT_EQUAL(1, res); - res = stringToNumber(L"01"); - CPPUNIT_ASSERT_EQUAL(1, res); - res = stringToNumber(u"01"); - CPPUNIT_ASSERT_EQUAL(1, res); + // stringToNumber() with spaces at the beginning, leading zeroes and different types + CPPUNIT_ASSERT_EQUAL(1, stringToNumber("01")); + CPPUNIT_ASSERT_EQUAL(1, stringToNumber(L"01"s)); + CPPUNIT_ASSERT_EQUAL(1, stringToNumber(u"01"s)); + CPPUNIT_ASSERT_EQUAL(-23, stringToNumber(" - 023"s)); + CPPUNIT_ASSERT_EQUAL(1u, stringToNumber("01")); + CPPUNIT_ASSERT_EQUAL(1u, stringToNumber(L"01"s)); + CPPUNIT_ASSERT_EQUAL(1u, stringToNumber(u"01"s)); + CPPUNIT_ASSERT_EQUAL(23u, stringToNumber(" 023"s)); // interpretIntegerAsString() - CPPUNIT_ASSERT(interpretIntegerAsString(0x54455354) == "TEST"); + CPPUNIT_ASSERT_EQUAL("TEST"s, interpretIntegerAsString(0x54455354)); // splitString() / joinStrings() string splitJoinTest = joinStrings(splitString>(",a,,ab,ABC,s"s, ","s, EmptyPartsTreat::Keep), " "s, false, "("s, ")"s);