Sfida: Accesso e Manipolazione degli Elementi di una Stringa
Indicizzazione di una stringa
È possibile accedere agli elementi di una string (che sono essenzialmente caratteri di tipo char) utilizzando l'indicizzazione con parentesi quadre [], in modo simile agli array. Questo consente anche di sostituire un carattere in una posizione specifica.
indexing.h
12string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
L'indicizzazione in una string parte da zero, proprio come negli array.
La lunghezza della stringa
Con questo tipo di indicizzazione, è possibile tentare di accedere a un indice errato (fuori dall'intervallo), e il compilatore non segnalerà alcun errore a riguardo.
main.cpp
1234567#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }
Come puoi vedere, l'output è inaspettato e C++ non fornisce alcun avviso riguardo al problema. Per evitare ciò, è possibile utilizzare il metodo .length() per determinare la lunghezza di una string e assicurarsi che l'indice sia all'interno dell'intervallo valido.
main.cpp
123456789101112#include <iostream> int main() { std::string word = "Codefinity"; int index = 12; if (index >= word.length()) std::cout << "The output is unexpected!" << std::endl; else std::cout << word[index]; // Word's length is 10 }
Indicizzazione tramite metodo
Un altro modo per indicizzare è utilizzare il metodo .at(). Per ottenere il carattere con indice n, è possibile utilizzare la seguente sintassi:
at.h
1str.at(n);
Funziona allo stesso modo di str[n], ma genera un errore se si specifica un indice fuori dall'intervallo.
main.cpp
12345678#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word.at(12); // word's length is 10 // Try outputting the character with the index 5 }
Pratica
Come detto in precedenza, è possibile sostituire i caratteri all'interno di una stringa utilizzando l'indicizzazione (sia con [] che con .at()). Ecco un esempio:
main.cpp
123456789#include <iostream> int main() { std::string word = "Cpdefinitu"; word[1] = 'o'; word.at(word.length() - 1) = 'y'; // length - 1 accesses the last element std::cout << word; }
Swipe to start coding
Hai un indirizzo email come stringa. Il tuo compito è mascherare la parte del nome utente dell'email per motivi di privacy.
La funzione maskEmail accetta una stringa che rappresenta l'indirizzo email.
- All'interno di
maskEmail, utilizza il metodofindper individuare la posizione del simbolo'@', che segna la fine del nome utente. - Verifica se il nome utente è più lungo di 1 carattere. In caso contrario, restituisci l'email invariata.
- Usa un ciclo
forper iterare dall'indice 1 fino a (ma non incluso) la posizione di'@'. - All'interno del ciclo, sostituisci ogni carattere con
'*'per mascherare il nome utente. - Restituisci l'email modificata.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 4.35
Sfida: Accesso e Manipolazione degli Elementi di una Stringa
Scorri per mostrare il menu
Indicizzazione di una stringa
È possibile accedere agli elementi di una string (che sono essenzialmente caratteri di tipo char) utilizzando l'indicizzazione con parentesi quadre [], in modo simile agli array. Questo consente anche di sostituire un carattere in una posizione specifica.
indexing.h
12string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
L'indicizzazione in una string parte da zero, proprio come negli array.
La lunghezza della stringa
Con questo tipo di indicizzazione, è possibile tentare di accedere a un indice errato (fuori dall'intervallo), e il compilatore non segnalerà alcun errore a riguardo.
main.cpp
1234567#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }
Come puoi vedere, l'output è inaspettato e C++ non fornisce alcun avviso riguardo al problema. Per evitare ciò, è possibile utilizzare il metodo .length() per determinare la lunghezza di una string e assicurarsi che l'indice sia all'interno dell'intervallo valido.
main.cpp
123456789101112#include <iostream> int main() { std::string word = "Codefinity"; int index = 12; if (index >= word.length()) std::cout << "The output is unexpected!" << std::endl; else std::cout << word[index]; // Word's length is 10 }
Indicizzazione tramite metodo
Un altro modo per indicizzare è utilizzare il metodo .at(). Per ottenere il carattere con indice n, è possibile utilizzare la seguente sintassi:
at.h
1str.at(n);
Funziona allo stesso modo di str[n], ma genera un errore se si specifica un indice fuori dall'intervallo.
main.cpp
12345678#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word.at(12); // word's length is 10 // Try outputting the character with the index 5 }
Pratica
Come detto in precedenza, è possibile sostituire i caratteri all'interno di una stringa utilizzando l'indicizzazione (sia con [] che con .at()). Ecco un esempio:
main.cpp
123456789#include <iostream> int main() { std::string word = "Cpdefinitu"; word[1] = 'o'; word.at(word.length() - 1) = 'y'; // length - 1 accesses the last element std::cout << word; }
Swipe to start coding
Hai un indirizzo email come stringa. Il tuo compito è mascherare la parte del nome utente dell'email per motivi di privacy.
La funzione maskEmail accetta una stringa che rappresenta l'indirizzo email.
- All'interno di
maskEmail, utilizza il metodofindper individuare la posizione del simbolo'@', che segna la fine del nome utente. - Verifica se il nome utente è più lungo di 1 carattere. In caso contrario, restituisci l'email invariata.
- Usa un ciclo
forper iterare dall'indice 1 fino a (ma non incluso) la posizione di'@'. - All'interno del ciclo, sostituisci ogni carattere con
'*'per mascherare il nome utente. - Restituisci l'email modificata.
Soluzione
Grazie per i tuoi commenti!
single