ネタ元 → 「インデックスが配列の境界外です。」について
んー、スレ主はCollectionをご存じないとミタ。
「C#を始めて2ヶ月足らず」なら無理もないかな。
で、僕ならこうする:
using System;
using System.Collections.Generic;
abstract class Item {
public abstract void print();
}
// 数
class Number : Item {
public int value;
public Number(int v) { value = v; }
public override void print() {
Console.WriteLine("Number : {0}", value);
}
}
// 演算子
class Operation : Item {
public char op;
public Operation(char o) { op = o; }
public override void print() {
Console.WriteLine("Operation : {0}", op);
}
}
class Program {
public static void Main() {
string equation = "12+34*56-78%90";
List<Item> result = new List<Item>();
char[] op = { '+', '-', '*', '/', '%' };
int op_pos;
// 演算子を見つけて切り出す
while ( (op_pos = equation.IndexOfAny(op)) >= 0 ) {
result.Add(new Number(int.Parse(equation.Substring(0,op_pos))));
result.Add(new Operation(equation[op_pos]));
equation = equation.Substring(op_pos+1);
}
// 最後に'数'が残ってるかな
if ( equation.Length != 0 ) {
result.Add(new Number(int.Parse(equation)));
}
// ともかく列挙してみよか
foreach ( Item item in result ) {
item.print();
}
}
}
ただしこのままでは空白とかあると切り出しに失敗するし、
単項'-'をOperation扱いにしちゃうんでもちっと工夫せなあかんやろけど。