Нахождение плавающих точек в большой строке - PullRequest
2 голосов
/ 20 июля 2011

У меня есть большая строка, в которой есть строка с плавающей точкой. Типичная строка будет иметь Item X $4.50 Description of item \r\n\r\n Item Z $4.75... На самом деле нет текста или причины для текста. У меня уже есть самое низкое, и мне нужно найти все значения в строке. Таким образом, если бы оно было 10.00, то было бы найдено каждое значение, равное 10.05 или меньше. Я бы предположил, что для поиска значений потребовалось бы какое-то регулярное выражение, а затем я мог бы поместить их в массив и затем отсортировать.

Так что было бы что-то вроде этого, чтобы найти, какое из этих значений соответствует моим критериям.

int [] array;
int arraysize;
int lowvalue;
int total;

for(int i = 0; i<arraysize; ++i)
{
    if(array[i] == lowvalue*1.05) ++total;
}

Моя проблема заключается в получении этих значений в массиве. Я прочитал это , но d + на самом деле не работает с плавающей точкой.

1 Ответ

5 голосов
/ 20 июля 2011

Вы должны использовать RegEx:

Regex r = new RegEx("[0-9]+\.[0-9]+");
Match m = r.Match(myString);

Нечто подобное. Тогда вы можете просто использовать:

float f = float.Parse(m.value);

Если вам нужен массив:

MatchCollection mc = r.Matches(myString);
string[] myArray = new string[mc.Count];
mc.CopyTo(myArray, 0);

EDIT

Я только что создал небольшое приложение для вас, Джо. Я скомпилировал его, и он отлично работал на моей машине, используя строку ввода из вашего вопроса. Если у вас возникли проблемы, опубликуйте вашу InputString, чтобы я мог попробовать это с этим. Вот код, который я написал:

static void Main(string[] args)
{
    const string InputString = "Item X $4.50 Description of item \r\n\r\n Item Z $4.75";

    var r = new Regex(@"[0-9]+\.[0-9]+");
    var mc = r.Matches(InputString);
    var matches = new Match[mc.Count];
    mc.CopyTo(matches, 0);

    var myFloats = new float[matches.Length];
    var ndx = 0;
    foreach (Match m in matches)
    {
        myFloats[ndx] = float.Parse(m.Value);
        ndx++;
    }

    foreach (float f in myFloats)
        Console.WriteLine(f.ToString());

    // myFloats should now have all your floating point values
}
...