Извлечение последнего числа после точки в строке типа «7.8.9.1.5.1.100» - PullRequest
2 голосов
/ 08 февраля 2011

Я задавал этот же вопрос для решения в C ++, но из-за некоторых ограничений мне нужно решение в C.

Эта строка также может быть "7.8.9.1.5.1.1" или "7.8.9.1.5.1.0".

Я также хотел бы проверить, что это точно "7.8.9.1.5.1" перед последней точкой.

Добавлено: Это отдельные значения. Можем ли мы использовать это в нашу пользу?

Ответы [ 3 ]

3 голосов
/ 08 февраля 2011

Совсем не сложно:

Оригинальный ответ (вероятно, это то, что вас интересует):

char str[] = "7.8.9.1.5.1.1";
atoi(strrchr(str, '.') + 1);

Более полно, но не настолько полно:

char str[] = "7.8.9.1.5.1.1";       //example
char *tmp  = NULL;
tmp = strrchr(str, '.');
if(tmp){
  *tmp = '\0';
  if(!strcmp(str, "7.8.9.1.5.1"))     //check for prefix
    return atoi(tmp+1);
}

Как вы можете видеть, я также попытался добавить некоторые проверки работоспособности и быть более безопасным, чем этот, чтобы иметь более полное представление о предполагаемых ожиданиях и о том, как передаются строки.Так что для простоты я буду придерживаться этого простого случая и примера реализации.: -)

1 голос
/ 08 февраля 2011
int value = -1;
char* lastdot = strrchr(source, '.');
if (lastdot != NULL && lastdot - source == 11 && !strncmp(source, "7.8.9.1.5.1", 11))
    value = atoi(lastdot+1);

значение будет> = 0, если число предшествует "7.8.9.1.5.1"

0 голосов
/ 08 февраля 2011

Если рассматриваемый язык читается слева направо (как английский), то «последняя точка» гарантированно будет первой точкой, с которой вы столкнетесь, если прочитаете строку справа налево. Упрощенные шаги:

  1. Найдите последнюю точку. Как то так: for (int index = strlen(theString); index > 0; --index) { ... details ... }
  2. Прочитайте цифры номера. Примерно так: for (int index = startingIndex; index < strlen(theString); ++index) { ... details ...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...