Member 12670328 Ответов: 1

Как проверить, состоит ли строка из цифры или алфавита в C


Мне нужна помощь в идентификации строки. У меня есть входящая строка вроде этой
*H1999999#
она может варьироваться от
*H1000000#~*H1999999#
иногда это так
*H1FINE# or *H1MED#
или любой другой текст между ними.Теперь то, что я уже сделал, - это проанализировал числовую строку и скопировал целочисленное значение в буфер. Вот код для этого.
 char H1subbuff[10];
 char head1[4];
 char Initial[2];

 char *ptr;

 memcpy(Initial, &rec[0], 1 );
 Initial[1] = '\0';

 memcpy(head1, &rec[0], 3 );
 head1[3] = '\0';



 if ((strcmp(head1,"*H1") == 0) && (rec[9] == '#'))
  {
     memcpy(H1subbuff, &rec[3], 6 );
     H1subbuff[6] = '\0';

     H1Val = strtol(H1subbuff, &ptr, 10);

     //Display H1VAL
}


Теперь мой вопрос заключается в том, как проверить, состоит ли строка из числа или алфавита.Все, что мне нужно, это проверить, является ли часть между *H1 и # числовой или алфавитной, если это число, которое я могу использовать
strtol()
чтобы скопировать значение в буфер. Как я могу скопировать алфавит или текст в буфер?

Примечание: - вышеприведенные две строки не имеют одинаковой длины строки.

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

Я попытался скопировать числовые значения в буфер.

1 Ответов

Рейтинг:
2

Richard MacCutchan

Используйте указатель, чтобы пропустить префиксные буквенные символы, а затем используйте strtol[^] для преобразования числа в длинное значение. То endptr затем переменная будет указывать на первый нечисловой символ, что позволит вам провести дальнейший анализ. Что-то вроде:

char* strData = "*H1999999#";
char* strNum = strData + 2;
char* strEnd = NULL;
long lValue = strtol(strNum, &strEnd, 10);
// strEnd will now point to the # character.


Member 12670328

Как проверить, состоит ли строка из числового значения или альпахабета?

Richard MacCutchan

используйте одну из функций isXXX, как описано в разделе https://msdn.microsoft.com/en-us/library/4yc6feha.aspx.

CPallini

5.