Ciao, mi sono permesso di fare qualche modifica al tuo codice (non all'algoritmo). Non si tratta di una "correzione", dato che il codice funziona alla perfezione, piuttosto di un consiglio. Per prima cosa ho spostato le dichiarazioni delle variabili che erano fuori dal main dentro, perché è meglio evitare di usare variabili globali. Poi ho apportato qualche cambiamento minore, come l'uso del carattere
\n per andare a capo invece di
endl (meno efficiente) e il qualificatore
const per rendere la variabile confronto una costante. Ecco qui:
C:
#include <iostream>
#include <string>
int main()
{
using namespace std;
const char confronto = '&';
string input;
cout << "inserire la stringa: \n";
getline(cin, input);
cout << "la stringa che hai inserito e': \n" << input << "\n";
for (int i = 0; i < input.length(); ++i) {
if (input[i] == confronto) {
i += 1;
while (input[i] != confronto) {
i += 1;
}
i += 2; //serve ad eliminare l'ultimo carattere speciale ed il secondo spazio
}
cout << input[i];
}
return 0;
}
In questa versione, invece, uso un oggetto
iterator per scandire la stringa anziché una variabile contatore tradizionale. Uso le funzioni
begin() e
end() per trovare l'inizio e la fine della stringa.
Da notare che per riferirmi all'i-esimo carattere della stringa scrivo
*i, cioè uso l'operatore di dereferenziazione, perché l'oggetto iterator è sostanzialmente un puntatore.
C:
#include <iostream>
#include <string>
int main()
{
using namespace std;
const char confronto = '&';
string input;
cout << "inserire la stringa: \n";
getline(cin, input);
cout << "la stringa che hai inserito e': \n" << input << "\n";
// uso un iterator per scandire la stringa
for (string::iterator i = input.begin(); i != input.end(); ++i) {
if (*i == confronto) {
i += 1;
while (*i != confronto) {
i += 1;
}
i += 2; //serve ad eliminare l'ultimo carattere speciale ed il secondo spazio
}
cout << *i;
}
return 0;
}