Entfernen führender und nachfolgender Leerzeichen aus einem String in C
Die String-Manipulation in C beinhaltet oft das Entfernen unnötiger Leerzeichen aus Strings. Dies kann besonders nützlich für Aufgaben wie Datenbereinigung oder Textverarbeitung sein.
Entfernen von führenden und nachgestellten Leerzeichen
Um führende und nachgestellte Leerzeichen zu entfernen, kann man find_first_not_of verwenden und find_last_not_of-Methoden. Diese Funktionen finden jeweils das erste und letzte Nicht-Leerzeichen in einer Zeichenfolge. Mit diesen Werten kann man die Teilzeichenfolge erhalten, die die Nicht-Leerzeichen enthält:
std::string trim(const std::string& str, const std::string& whitespace = " \t") { const auto strBegin = str.find_first_not_of(whitespace); if (strBegin == std::string::npos) return ""; // no content const auto strEnd = str.find_last_not_of(whitespace); const auto strRange = strEnd - strBegin 1; return str.substr(strBegin, strRange); }
Entfernen zusätzlicher Leerzeichen zwischen Wörtern
Um zusätzliche Leerzeichen zwischen Wörtern zu entfernen, ist ein zusätzlicher Schritt erforderlich. Dies kann mithilfe der Methoden find_first_of, find_last_of, find_first_not_of und find_last_not_of zusammen mit substr erreicht werden, um die zusätzlichen Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen:
std::string reduce(const std::string& str, const std::string& fill = " ", const std::string& whitespace = " \t") { // trim first auto result = trim(str, whitespace); // replace sub ranges auto beginSpace = result.find_first_of(whitespace); while (beginSpace != std::string::npos) { const auto endSpace = result.find_first_not_of(whitespace, beginSpace); const auto range = endSpace - beginSpace; result.replace(beginSpace, range, fill); const auto newStart = beginSpace fill.length(); beginSpace = result.find_first_of(whitespace, newStart); } return result; }
Beispielverwendung
Der folgende Codeausschnitt demonstriert die Verwendung dieser Funktionen:
const std::string foo = " too much\t \tspace\t\t\t "; const std::string bar = "one\ntwo"; std::coutAusgabe:
[too much space] [too much space] [too-much-space] [one two]
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3