在C中获得子字符串

在C中获得子字符串,c,strstr,C,Strstr,我有一个以下格式的字符串: “R:625.5m东:-32768m” 提取625.5最有效的方法是什么?sscanf是解析固定格式简单字符串的好方法。您最好的选择是从字符串中读取格式化信息 sscanf(mystr, "R: %f", &myFloat); 使用正则表达式。现在您有两个问题:)我收回它。。。什么是完成这件事的最快最肮脏的方法?对不起,我可怜的笑话。事实上,我也回答了这个问题。使用sscanf。像往常一样,对于这些“我如何解析这个”问题,了解哪些部分不同,变化有多大会有所帮

我有一个以下格式的字符串: “R:625.5m东:-32768m”


提取625.5最有效的方法是什么?

sscanf
是解析固定格式简单字符串的好方法。

您最好的选择是从字符串中读取格式化信息

sscanf(mystr, "R: %f", &myFloat);

使用正则表达式。现在您有两个问题:)我收回它。。。什么是完成这件事的最快最肮脏的方法?对不起,我可怜的笑话。事实上,我也回答了这个问题。使用
sscanf
。像往常一样,对于这些“我如何解析这个”问题,了解哪些部分不同,变化有多大会有所帮助?例如,它是否总是以数字前的3个字符开始,或者它是否可以更多,并且是数字变量的长度,它是否可以是欧洲形式(带有逗号小数),它是否总是以“m”结尾,等等。OP搜索最有效way@Svisstack:见评论。他想要的是“快而脏”,而不是“比sscanf快三毫秒”
sscanf
是正确的答案。@Svisstack:但他没有说他是否更关心运行时效率或程序员效率,也没有说他是否需要结果作为字符串或数字,也没有说字符串可能会有多大的变化,他是否可以修改原始字符串等等。他不知道所有这些,
sscanf
是一个与任何选择一样好的选择,比大多数选择都好(当然比任何涉及修改输入的选择都更合理)。
*scanf
在其定义中隐藏了足够多的惊喜,我认为,永远不要使用。而且-就像正则表达式一样-现在你有两个问题。@Zack:解析已经是问题所在。正则表达式是解析问题之上的问题。我的意思是,
*scanf
也是原始解析问题之上的问题。看看我对其他答案的回答。效果很好。谢谢各位。1.剪掉R:2。删掉任意数量的空白。3.使用sscanf@Zack:假设i18n不是一个问题(尽管它是一个有效的边缘案例),sscanf并没有你想象的那么糟糕。