Javier Luis Lopez Ответов: 3

Как определить, начинается ли строка с числа?


Для того чтобы определить, что строка является числом, обычно предлагается следующее:

bool isParam(string line)
{
    char* p;
    strtol(line.c_str(), &p, 10);
    return *p == 0;
}


К сожалению для меня *p указывает на первый символ, если внутри нет числа, то есть нет 0

Как я должен использовать strtol ()?

Что я уже пробовал:

Затем я попробовал это, что, кажется, работает, если кто-то не пишет десятичные дроби, начинающиеся с точки:

bool isNumber(string str1) 
{ 	
    char p = str1.c_str()[0]; return (p >= '0' && p <= '9'); 
}


После поста Ричарда Маккатчана это сработало для меня:
bool isnumber(string str1) { return (isdigit(str1.c_str()[0])>0);}

0x01AA

И вы проверили также случай, когда число начинается с". " или " + "или" -"?
:-)

3 Ответов

Рейтинг:
23

Richard MacCutchan

Изучите функции библиотеки C, и вы найдете isdigit().


Рейтинг:
12

Javier Luis Lopez

По неизвестной причине у меня возникла ошибка утверждения при использовании isdigit() на символе -96 ' ', поэтому я должен рекомендовать использовать:

if (line[0] >= '0' && line[0] <= '9')

вместо isdigit()

Вот используемая функция (строка[] имеет табуляторы):
//char line[]="N 2	32.1dC	28.7dC	25.2dC	20.7dC	19.6dC	18.5dC	74 %	67 %	52 %	4 kph	2 kph	0 kph";
double string_to_double2(char *line, int num)
{
	int i1 = 0, max = (int) strlen(line);
	for (int i = 0; i < max; i++)
	{
		//if (isdigit(line[0])>0)
		if (line[0] >= '0' && line[0] <= '9')
		{
			if (i1 == num) return strtod(line,&line);
			strtod(line, &line);i1++;
		}
		else line++;
	}
	return -99999999;
}


Richard MacCutchan

Я предложил isdigit просто как отправная точка чтобы заставить тебя задуматься. Как разработчик, вы должны учитывать все возможные ситуации, которые могут возникнуть в ваших данных, и код для каждой из них.

Рейтинг:
0

CPallini

Если вам нужно обнаружить тоже значения с плавающей запятой, затем используйте strtod[^] (а затем проверьте значение str_end параметр).