从System :: String中删除除数字和小数点之外的所有内容

时间:2013-11-20 18:13:43

标签: c++ c++-cli

我有一个System::String(在C ++ CLI窗体表单应用程序中)我要格式化以删除除数字和小数点以外的所有内容。

字符串看起来应该像"letters0.231 letters $#symbols",我只希望保留0.231

我不想将此String封送到std::string并使用erase()功能,然后必须转换回System::String

有没有办法直接在System::String上执行此操作?

2 个答案:

答案 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 CharCharSystem::Char,这是广泛的unicode字符类型。小写-c char是一个C ++ char,它是一种窄的ASCII字符类型。

另请注意,这不是国际化的:其他国家/地区使用,作为小数,并且除英语键盘上的0-9之外,还有Unicode中的数字。