class Program
{
static void Main(string[] args)
{
Console.WriteLine(Next("abc123def345ghi"));
Console.Read();
}
private static string Next(string s)
{
if (!isNumber(s.Substring(s.Length-1,1)))
s = s + "0";
MatchCollection coll = Regex.Matches(s, @"\d+");
Match m = coll[coll.Count - 1];
return s.Substring(0, m.Index) + NextNum(m.Value);
}
private static string NextNum(string s)
{
char[] cs = s.ToCharArray();
for (int i = s.Length - 1; i >= 0; i--)
{
if (!NextChar(ref cs[i])) break;
}
string re = new string(cs);
if (Int32.Parse(re) == 0)
re = "1" + re;
return re;
}
private static bool NextChar(ref char c)
{
string p = "01234567890123456789";
int n = p.IndexOf(c);
c = p[(n + 1) % 10 + 10 * (n / 10)];
return (n == 9 || n == 19);
}
public static bool isNumber(string str)
{
Regex r = new Regex(@"^\d+(\.)?\d*$");
if (r.IsMatch(str))
{
return true;
}
else
{
return false;
}
}