Taglia una stringa in C++
Questo articolo spiegherà come tagliare una stringa in C++.
Usa i metodi erase()
, find_first_not_of()
e find_last_not_of()
per implementare le funzioni di taglio delle stringhe
Poiché la libreria C++ standard non contiene le funzioni per il taglio delle stringhe, sarà necessario implementarle da soli o utilizzare librerie esterne come Boost (vedi algoritmi di stringa).
Nei seguenti esempi, mostriamo come costruire funzioni personalizzate usando 2 metodi std::string
incorporati. In primo luogo, implementiamo la funzione leftTrim
, che taglia i caratteri passati come argomento dal lato sinistro della stringa. Abbiamo specificato arbitrariamente i caratteri .
, ,
, /
E gli spazi bianchi da ritagliare.
La funzione leftTrim
chiama il metodo find_first_not_of
per trovare il primo carattere diverso da char
-s nell’argomento dato e restituisce una posizione a quella trovata. Quindi il metodo erase
rimuove l’intervallo di caratteri dall’inizio fino alla posizione trovata.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& leftTrim(string& str, string& chars) {
str.erase(0, str.find_first_not_of(chars));
return str;
}
int main() {
string chars_to_trim = ".,/ ";
string text = ",., C++ Standard";
cout << text << endl;
leftTrim(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
Produzione:
,., C++ Standard
C++ Standard
In alternativa, possiamo ripristinare la funzione trimLeft
per tagliare i caratteri dati dal lato destro della stringa. In questo caso, utilizziamo il metodo find_last_not_of
, che cerca l’ultimo uguale a nessuno dei caratteri passati come argomento. Di conseguenza, il metodo delete
viene chiamato con il parametro posizione trovata + 1
.
Si noti che entrambe queste funzioni operano sulla stringa in posizione e non restituiscono una copia della versione ridotta.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& rightTrim(string& str, string& chars) {
str.erase(str.find_last_not_of(chars) + 1);
return str;
}
int main() {
string chars_to_trim = ".,/ ";
string text = "C++ Standard /././";
cout << text << endl;
rightTrim(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
Produzione:
C++ Standard /././
C++ Standard
Infine, possiamo combinare le funzioni precedenti per implementare la funzione trimString
, che rimuove i caratteri di entrambi i lati. La funzione ha gli stessi parametri delle versioni sinistra / destra. trimString
chiama leftTrim
passandogli il risultato della funzione rigthTrim
come argomento. È possibile scambiare le posizioni di queste chiamate di funzione senza alterare la correttezza del programma.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& leftTrim(string& str, string& chars) {
str.erase(0, str.find_first_not_of(chars));
return str;
}
string& rightTrim(string& str, string& chars) {
str.erase(str.find_last_not_of(chars) + 1);
return str;
}
string& trimString(string& str, string& chars) {
return leftTrim(rightTrim(str, chars), chars);
}
int main() {
string chars_to_trim = ".,/ ";
string text = ",,, .. C++ Standard ...";
cout << text << endl;
trimString(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
,,, .. C++ Standard ...
C++ Standard
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook