-1

我有 3 组以下数据。

EUR5-002,EUR10-000,
EUR20-001,EUR50-001,
EUR100-001,EUR200-000,
EUR500-000

EUR5-000,EUR10-000,
EUR20-002,EUR50-001,
EUR100-001,EUR200-000,
EUR500-000

EUR5-001,EUR10-001,
EUR20-002,EUR50-001,
EUR100-002,EUR200-003,
EUR500-000

这里 EUR - CurrencyID 和 5,10,20,50,100,200,500 是货币值。而“-”后的数值为相应面额的纸币数量。(EUR5-002,表示5欧元的2张纸币)

在我的代码中,我已将每个集合读取为字符串并添加到列表中。

我需要使用正则表达式或其他方法在 C# 中使用逻辑来从所有 3 组数据中添加每个单独的面额计数。

从上面的数据,我必须得到如下输出。

EUR5-003,EUR10-001,
EUR20-005,EUR50-003,
EUR100-004,EUR200-003,
EUR500-000
4

2 回答 2

1

代码不处理任何可能由错误输入格式引起的错误,您可以自己维护。

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = new [] {
                "EUR5-002,EUR10-000,EUR20-001,EUR50-001,EUR100-001,EUR200-000,EUR500-000", 
                "EUR5-000,EUR10-000,EUR20-002,EUR50-001,EUR100-001,EUR200-000,EUR500-000", 
                "EUR5-001,EUR10-001,EUR20-002,EUR50-001,EUR100-002,EUR200-003,EUR500-000"
            };

            var results = new Dictionary<string, int>();

            foreach (var line in data)
            {
                var entries = line.Split(',');
                foreach (var entry in entries)
                {
                    var parts = entry.Split('-');
                    string key = parts[0];
                    if (!results.ContainsKey(key))
                    {
                        results[key] = 0;
                    }

                    results[key] += int.Parse(parts[1]);
                }
            }

            foreach (var result in results)
            {
                Console.WriteLine(result.Key + "-" + result.Value.ToString("000"));
            }

            Console.ReadLine();
        }
    }
}
于 2013-07-02T10:23:38.397 回答
0

你可以这样做

//limit is the highest value of currency
int temp=0;
for(int x=1;x<=limit;x++,temp=0)
{
if((temp=parseDenomination(x,input))!=0)
     output+=","+"EUR"+x+"-"+temp;
}
//output has your desired output

private static int parseDenomination(int no,String input)
{
        return Regex.Matches(input,@"(?<=EUR"+no+@"-)\d+")
                    .Cast<Match>()
                    .Select(x=>int.Parse(x.Groups[0].Value))
                    .ToList()
                    .Sum();
}
于 2013-07-02T10:23:31.153 回答