我有一个System::String
(在C ++ CLI窗体表单应用程序中)我要格式化以删除除数字和小数点以外的所有内容。
字符串看起来应该像"letters0.231 letters $#symbols"
,我只希望保留0.231
我不想将此String
封送到std::string
并使用erase()
功能,然后必须转换回System::String
有没有办法直接在System::String
上执行此操作?
答案 0 :(得分:2)
我认为你可以使用正则表达式。
的东西String ^s = "letters0.231 letters $#symbols";
Regex ^regex = gcnew Regex( "\\d*\\.\\d*" );
s = regex->Match( s )->Value;
double d = Double::Parse( regex->Match( s )->Value );
Console::WriteLine( "s = {0}", s );
Console::WriteLine( "d = {0}", d );
答案 1 :(得分:1)
正则表达式可以工作,但对于类似的东西,我采取直接的方法:迭代字符串,并将所有数字和小数点放入一个新的字符串。
String^ GetNumbersAndDecimalPointOnly(String^ input)
{
StringBuilder^ sb = gcnew StringBuilder(input->Length);
for each (Char c in input)
{
switch (c)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '.':
sb->Append(c);
break;
}
}
return sb->ToString();
}
int main(array<System::String ^> ^args)
{
String^ input = "letters0.231 letters $#symbols";
String^ output = GetNumbersAndDecimalPointOnly(input);
Debug::WriteLine(output);
return 0;
}
结果:
0.231
请务必在for循环中使用capital-C Char
。 Char
是System::Char
,这是广泛的unicode字符类型。小写-c char
是一个C ++ char,它是一种窄的ASCII字符类型。
另请注意,这不是国际化的:其他国家/地区使用,
作为小数,并且除英语键盘上的0-9之外,还有Unicode中的数字。