提取字符串中点后的最后一个数字,如“;7.8.9.1.5.1.100”; 我在C++中提出了同样的问题,但是由于一些限制,我需要C.中的解。
该字符串也可以是“7.8.9.1.5.1.1”或“7.8.9.1.5.1.0” 我还想验证它是否正好位于最后一点之前的“7.8.9.1.5.1” 增加: 这些是分开的值。我们能用它来帮助我们吗?一点也不难: 原始答案(可能是您感兴趣的): 更完整,但不是那么完整:提取字符串中点后的最后一个数字,如“;7.8.9.1.5.1.100”; 我在C++中提出了同样的问题,但是由于一些限制,我需要C.中的解。,c,string,C,String,该字符串也可以是“7.8.9.1.5.1.1”或“7.8.9.1.5.1.0” 我还想验证它是否正好位于最后一点之前的“7.8.9.1.5.1” 增加: 这些是分开的值。我们能用它来帮助我们吗?一点也不难: 原始答案(可能是您感兴趣的): 更完整,但不是那么完整: char str[] = "7.8.9.1.5.1.1"; //example char *tmp = NULL; tmp = strrchr(str, '.'); if(tmp){ *tmp = '\0'; i
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);
}
正如您所看到的,我还尝试添加一些健全性检查,为了更安全,那么这个检查必须对隐含的期望以及字符串的传递方式有更多的了解。因此,为了保持简单,我将继续使用这个简单的案例和实现示例。:-)
如果数字前面有“7.8.9.1.5.1”,则该值将>=0。如果所述语言是从左到右读取的(如英语),则“最后一个点”保证是从右到左读取字符串时遇到的第一个点。 简化步骤:
for(int index=strlen(theString);index>0;--index){…细节…}
for(int index=startingIndex;index
可能不是重复的问题,因为这个问题是关于C++的,“在C中,这将是一件更难破解的事情”你为什么这么认为?除了库函数strrchr之外,从字符串末尾向后扫描以查找最后一个点是很简单的。如果使用正确的解决方案,以您描述的方式进行验证似乎有些过分。如果它是一个函数,我可以理解验证输入,但为什么要验证输出?我的意思是相对而言只。你不能像那样使用+,你需要一个左值。+1。检查字符串是否以“7.8.9.1.5.1”开头,就可以设置了。但是要做strrchr(str,'.')+1,比如放松点out@unwind&&Øystein左值问题已修复。@Shinnok:嗯,我怀疑
strcmp()
是否有助于检查前缀。。请看一下strncmp()
insteadshait…希望它现在已修复,这就是您尝试在跑步时回答问题时发生的情况,而现在我正在跑步。:-)
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);
}
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);