Привет, я не уверен, что это подходящее место, чтобы задать этот вопрос. Так или иначе, я написал этот код, чтобы разобрать формулу молекулы и разбить ее на атомы и количество каждого атома.Parse int and string
Например, если я ввожу "H2O"
Я буду для массива атомов получить {"H", "O"}
и в массиве количества я получу {2, 1}
. Я не принял во внимание сумму, которая больше 9, так как я не думаю, что есть молекула, которая может связываться с чем-то большим, чем 8.
В любом случае я довольно новичок, поэтому я задаюсь вопросом, кусок кода можно сделать лучше?
string formula = "H2O";
int no, k = 0, a = 0;
string atom[10];
int amount[10];
bool flag = true;
stringstream ss(formula);
for(int i = 0; i < formula.size(); ++i)
{
no = atoi(&formula[i]);
if(no == 0 && (flag || islower(formula[i])) )
{
cout << "k = " << k << endl;
atom[k] += formula[i];
flag = false;
cout << "FOO1 " << atom[k] << endl;
amount[a] = 1;
}
else if(no != 0)
{
amount[a] = no;
cout << "FOO2 " << amount[a] << endl;
a++;
flag = true;
k++;
}
else
{
k++;
a++;
atom[k] = formula[i];
cout << "FOO3 " << atom[k] << endl;
amount[a] = 1;
flag = false;
}
cout << no << endl;
}
«Я не думаю, что есть молекула, которая может связываться с чем-то большим, чем 8». Длинноцепочечные углеводороды могут быть выражены как CNHM, при больших N и M. – Raedwald
«Интересно, может ли этот фрагмент кода стать лучше?» Вы можете быть более конкретным? Есть ли что-нибудь, в частности, вы недовольны? – Raedwald
Это, безусловно, правильное место, чтобы задать свой вопрос :-) Btw не должен быть массивом количества '{2, 1}' для ввода «H2O»? –