Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中分隔字符串中的数字和单位# 我必须在C++中用C++编写一个等价的,_C#_C++_Regex_String_Scanf - Fatal编程技术网

C# 在C中分隔字符串中的数字和单位# 我必须在C++中用C++编写一个等价的,

C# 在C中分隔字符串中的数字和单位# 我必须在C++中用C++编写一个等价的,,c#,c++,regex,string,scanf,C#,C++,Regex,String,Scanf,到目前为止还可以,但我想知道是否有其他方法可以做到这一点?我有点担心正则表达式,因为根据上的公认答案,使用([-]?\d*\。?\d+)而不是([-]?(\d*\)?\d+)可能会因为邪恶的正则表达式而危险。但如果我包括这些额外的括号,那么我就有一个额外的组。这会导致Split()将类似123.456miles的内容拆分为一个包含元素的数组 {emptystr, 123.456, 123., miles} 这样,我无法确定在这种情况下,miles的单位是否在val\u arr[2]中,这是一个

到目前为止还可以,但我想知道是否有其他方法可以做到这一点?我有点担心正则表达式,因为根据上的公认答案,使用
([-]?\d*\。?\d+)
而不是
([-]?(\d*\)?\d+)
可能会因为邪恶的正则表达式而危险。但如果我包括这些额外的括号,那么我就有一个额外的组。这会导致
Split()
将类似
123.456miles
的内容拆分为一个包含元素的数组

{emptystr, 123.456, 123., miles}
这样,我无法确定在这种情况下,
miles
的单位是否在
val\u arr[2]
中,这是一个问题


我测试了这个。我还试图打破我的正则表达式模式,
([-]?\d*\。?\d+)
,但它似乎很好,“邪恶的正则表达式安全”。因此,我不确定我是否应该坚持到目前为止所做的工作,或者找到一个更优雅的解决方案(如果有的话)。

不是很优雅,但是你不能只查找字符串中的第一个字母来知道你的单元从何处开始吗

  static void SplitValAndUnit(string unsplitData)
  {
     for (int x = 0; x < unsplitData.Length; x++)
     {
        if (Char.IsLetter(unsplitData[x]))
        {
           string value = unsplitData.Substring(0, x);
           // TryParse value to whatever data type
           string unit  = unsplitData.Substring(x, unsplitData.Length - x);
        }
     }
  }
static void SplitValAndUnit(字符串数据)
{
对于(int x=0;x
这和C有什么关系?哦,天哪,对不起。我忘了说我必须重写C++中的C++片段。C++代码应该是一个数字和一个单位的字符串,我相信它只是在“英里”或“Km”(虽然可能有变化,我不能确定在这一点),并将其分成“代码>浮标Value/Cudio>和<代码>字符串单元< /代码>。我正试图在我的C#代码中做类似的事情,其中正则表达式模式将中的
val#u分割成一个字符串数组,然后我可以将
val#u arr[1]
作为“val”,将
val#arr[2]
作为“unit”。到目前为止,这个问题似乎还没有得到很好的回答。如果我说得不够清楚,我向你道歉。正则表达式模式应该采用
123
123.456
.456
等格式,但不匹配
123.
12.34.56
等格式。一个示例输入是
string val_in=123.456miles
。在C++代码中,这个字符串将被分割成<代码>浮点Value= 123.456 和 String单元=“MaleX”<代码>。注意:“代码> Car。ISNEONE <代码>检查可以用<代码> ReGEX < /代码>替换以检查仍被认为是字母的奇怪字符。
{emptystr, 123.456, 123., miles}
  static void SplitValAndUnit(string unsplitData)
  {
     for (int x = 0; x < unsplitData.Length; x++)
     {
        if (Char.IsLetter(unsplitData[x]))
        {
           string value = unsplitData.Substring(0, x);
           // TryParse value to whatever data type
           string unit  = unsplitData.Substring(x, unsplitData.Length - x);
        }
     }
  }