在像“7.8.9.1.5.1.100”这样的字符串中的点后面提取最后一个数字

时间:2011-02-08 12:43:28

标签: c string

我在C ++中提出了同样的问题,但是由于一些限制,我需要用C语言解决这个问题。

此字符串也可以是“7.8.9.1.5.1.1”或“7.8.9.1.5.1.0”。

我还想验证它在最后一个点之前是“7.8.9.1.5.1”。

添加了: 这些是分开的值。我们可以用它来帮助我们吗?

3 个答案:

答案 0 :(得分:3)

一点也不坚韧:

原始答案(可能是您感兴趣的内容):

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 :(得分:1)

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);
如果数字前面有“7.8.9.1.5.1”

,则

值将>> = 0

答案 2 :(得分:0)

如果从左到右阅读有问题的语言(如英语),那么“最后一个点”将保证是您从右到左阅读字符串时遇到的第一个点。 简化步骤:

  1. 找到最后一个点。这样的事情:for (int index = strlen(theString); index > 0; --index) { ... details ... }
  2. 读取数字的数字。这样的事情:for (int index = startingIndex; index < strlen(theString); ++index) { ... details ...}