Hallo zusammen,
ich möchte kurz das Problem erläutern und dann den Teil vorstellen den ich verwendet habe. Ich habe ein Vektorfeld mit Strings, die in etwa so aussehen:
H2O RALD3B OH NC3H7 .5CO NC3H7OO C4H5 4H
Die Strings repräsentieren chemische Spezies. Das Thema ist nun, dass vor manchen Species sogenannte stöchiometrische Faktoren stehen (float), die nicht gleich Eins sind. Um das zu prüfen dachte ich mir, dass ich die erste Stelle des Strings auf Buchstaben prüfe. Falls kein Buchstabe gefunden wird, gehe zur nächsten String stelle und prüfe wieder. Dies wird solang durchgeführt bis ein Buchstabe gefunden wird. Die Position im String wird dann zum Teilen des Strings mit substr verwendet. Es funktioniert soweit auch, nur möchte ich gerne wissen ob der cast von char auf string konform ist oder ob man das anders macht. Möglicherweise sollte ich einfach gleich die chars miteinander vergleichen und ohne einen Cast durchzuführen. Der Ausschnitt sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //- loop through the field forAll(speciesField, species) { //- loop through all single letter of the species for (unsigned int i = 0; i < speciesField[species].size(); i++) { //- compare single letter with ASCII table (LETTERS) for (unsigned int j = 65; j <= 90; j++) { //- reinterprete int to char and then save as string std::string delimiter = (1, static_cast<char>(j)); //- reinterprete char to string std::string tmp(1, static_cast<char>(speciesField[species][i])); //- search delimiter std::size_t found = tmp.find(delimiter); //- match means letter found if (found != std::string::npos) { Do something... break; } } } } |
Eine bessere Lösung ist mir auf die Schnelle nicht eingefallen. Vielleicht ist es auch wesentlich besser mit einem regulären Ausdruck das ganze zu prüfen. Anregungen und Kritik erwünscht.