我在C ++中提出了同样的问题,但是由于一些限制,我需要用C语言解决这个问题。
此字符串也可以是“7.8.9.1.5.1.1”或“7.8.9.1.5.1.0”。
我还想验证它在最后一个点之前是“7.8.9.1.5.1”。
添加了: 这些是分开的值。我们可以用它来帮助我们吗?
答案 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)
如果从左到右阅读有问题的语言(如英语),那么“最后一个点”将保证是您从右到左阅读字符串时遇到的第一个点。 简化步骤:
for (int index = strlen(theString); index > 0; --index) { ... details ... }
for (int index = startingIndex; index < strlen(theString); ++index) { ... details ...}