-4

分子を解析して原子数を取得するプログラムを作成することになっています。このように: C6H12OH で、出力は次のようになります。C=6, O=1, H=13

これは私がこれまでに書いたコードです:

class ParseMolecule 
{ 
    public static void main(String s[])
    {
        System.out.println("The atoms count in the molecule C6H12OH is :" + getElementsMap("C6H12OH"));
    }

    public static Map<String, Integer> getElementsMap(String molecule) 
    {
        for(char c : molecule.toCharArray())
        {
            System.out.println(c);
        }
    }
}

これは私の宿題でも何でもありません。私はウェブサイトでこれを見つけたばかりで、それを理解しようとしていました.

4

2 に答える 2

1

以下から始めることができます (単一の文字で表される要素に対してのみ機能します) :

   String input = "C6H12OH";
   Pattern p = Pattern.compile("([A-Z])([0-9]*)");
   Matcher m = p.matcher(input);
   Map <Character, Integer> atoms = new HashMap<Character, Integer>();
   while (m.find()) {
       Character element = m.group(1).charAt(0);
       Integer count =  Integer.parseInt(m.group(2).equals("") ? "1" : m.group(2));
       atoms.put(element, count + (atoms.get(element) == null ? 0 : atoms.get(element)));
   }
   System.out.println(atoms);
于 2013-02-16T08:04:28.950 に答える
0

擬似コード:

char last = 0
for (char c: input)
  if (!isDecimal(c))
    if (count == 0) // no number between 2 characters
      count = 1
    map[last] += count
    last = c
    count = 0
  else
    count = count*10 + charToInt(c)
    last = 0
于 2013-02-16T16:49:38.443 に答える