Как сделать, чтоб функция возвращала ложь, если, например, str = 5g

Как сделать, чтоб функция возвращала ложь, если, например, str = 5g.
Если просто число, то возвращается flag_Infix = chislo_i; return true;
А вот если 5g, то загоняю в цикл str (он то как раз наверно у меня и не работает) и проверяем:
Если первый символ число - инкрементируем счетчик, провереям второй символ.
Если он не число - то возвращаем ложь. Надо чтобы функция вернула false при таком раскладе.
Правильно ли работает цикл? И правильно ли вообще работают условия?
Просто у меня функция возвращает истину, даже если str = 5g.

bool Proverka_Infix(string str, MyType_Infix &flag_Infix)
{
switch(str[0])
{
case '+': flag_Infix = plus_i; return true; break;
case '-': flag_Infix = minus_i; return true; break;
case '*': flag_Infix = umnojit_i; return true; break;
case '/': flag_Infix = delit_i; return true; break;
case '^': flag_Infix = stepen_i; return true; break;
case '~': flag_Infix = un_minus_i; return true; break;
case '(': flag_Infix = open_i; return true; break;
case ')': flag_Infix = close_i; return true; break;
}
for(int i = 0; i < str.length(); i++)
{
if (str < '0' || str > '9')
{
i++;
return false;
}
}
flag_Infix = chislo_i;
return true;
}

  • for(int i = 0; i < str.length(); i++) return false; Ошибки : приведение типов, если нужен знак то необходимо обратиться к строке по индексу, а это уже знаковый тип char который приводим к String явно. Зачем трогать итератор, проще использовать либо break либо continue в зависимости от надобности. А вообще в С++ есть более цивилизованные способы определения является та или иная переменная целочисленным типом, к примеру вот так String a = "5gramov"; if (isdigit(StrToInt((String)a[1]))) return true;