Entfernen von Zeichen aus string löschen-Funktion - C++
Ich löschen wollen keine Anzahl Zeichen in einem string, hier ist mein code, es zu tun:
int i=0;
while (num[i]!=NULL)
{
if (!(num[i]>='0' && num[i]<='9'))
num.erase(i,1);
i++;
}
denke, num e2, dann sollten es nur 2, aber es wird zu "e". Oder wenn num 2er4, dann wird es 2e4, aber es sollten 24 sein, wie man dieses Problem beheben code?
- Eine nette Sache über C++ ist die umfangreiche Standardbibliothek, die kommt mit vielen netten algorithmen, wie beispielsweise
std::remove_if
, die verwendet werden können, mitstd::isalpha
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein paar Probleme mit deinem code: Die erste ist, dass Ihr
if
Bedingung zu löschen Zeichen, indem Sie die Ziffern, wenn man Sie will das Gegenteil. Das andere problem ist, dass, wenn Sie löschen ein Zeichen, dann die Länge des Strings wird geändert, damit der indexi
ist nicht mehr gültig.Dann Sie loop während der Charakter als position
i
(die Grenzen durch das zweite problem, das ich aufgeführt) ist nichtNULL
. AberNULL
ist nur für Zeiger, wenn alles, was Sie sollte, check gegen'\0'
statt. Obwohl ich würde nicht empfehlen, weil nichts wirklich besagt, dass Zeichenfolge-Daten in einestd::string
(was ich vermutenum
ist) müssen null-terminiert ist. Statt Schleife über die Länge der Zeichenfolge, oder verwenden Sie Iteratoren.Und wie ich Stand in meinem Kommentar, es sein kann viel einfacher als Sie Ihren code, indem Sie einfach den Aufruf einer einzigen Funktion.
Wie bereits von Joachim, der standard-Bibliothek bietet Sie algorithmen, können Sie trivial verwenden, um Ihr Ziel zu erreichen. Die übliche Vorgehensweise zum entfernen von Elementen aus einer Standardbibliothek container der Sie löschen entfernen idiom. Die
std::string
Klasse kann als ein container, in diesem Fall, und der Algorithmus funktioniert wie erwartet. Dies ist ein Beispiel, wo diestd::isdigit
Funktion wird verwendet, um zu bestimmen, welche Elemente entfernt aus dem string:return !std::isdigit(c);
Schließlich löse ich es mit Joachim Pileborg Tipps, Danke Mann;