-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 紙幣を意味します)

私のコードでは、各セットを文字列として読み取り、リストに追加しました。

正規表現またはその他を使用して、3 セットのデータすべてから個々の金種カウントを追加する C# のロジックが必要です。

上記のデータから、以下のような出力を取得する必要があります。

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 に答える