loops – using isDigit to find charecters c++

loops – using isDigit to find charecters c++

Below I modified your code so that it gives correct answer. For input 30-something it gives 36 as output.

As I understood you want to finish conversion right after 30 i.e. ignore -something. For such behaviour I put a flag stop_on_first_non_digit in my code, if it is true then it finishes on first non-digit character. But you may set it to false then I just skip non-digit chars but use all chars that are digits, for example -something has e in it, so contains one digit, if stop_on_first_non_digit is false then this single e digit will be used. By default now it is true so that it behaves the way you like.

Also I kept your logic of skipping first spaces in a string so you can input 30-something (leading spaces) and it gives 36 too.

Try it online!

#include <string>
#include <cctype>
#include <iostream>

int main() {
    std::string duo = 30-something;
    bool stop_on_first_non_digit = true;
    size_t i = 0;
    int decValue = 0;

    while (i < duo.length() && std::isspace(duo.at(i)))
        ++i;

    for (; i < duo.length(); ++i) {
        char c = duo.at(i);
        int digit = 0;
        if (std::isdigit(c))
            digit = c - 0;
        else if (c == x || c == X)
            digit = 10;
        else if (c == e || c == E)
            digit = 11;
        else {
            if (stop_on_first_non_digit)
                break;
            else
                continue;
        }
        decValue *= 12;
        decValue += digit;
    }
    std::cout << decValue << std::endl;
}

Output:

36

loops – using isDigit to find charecters c++

Leave a Reply

Your email address will not be published. Required fields are marked *