Domanda:
linguaggio C++:come faccio a fare un' inserimento di una stringa senza dovergli dire la sua lunghezza?
Nightmare
2010-01-08 02:49:55 UTC
ho questo esercizio che deve verificare che una striga inserita dall'utente sia o no una frase palindroma. il problrma è che usando cin devo dirgli la dimensione della frase(ma non la so in partenza) e con cin.get o cin.getline conta gli spazi i tabulatori e gli acapo compromettendo il controllo?
ora, come faccio a fargli leggere la mia striga senza che leegga gli spazi, etc e senza dover comunicare la sua lunghezza????
Tre risposte:
LordFener
2010-01-08 03:35:07 UTC
Hai due possibilità:

- utilizzi la classe string, contenuta nell'header

- oppure i vettori di caratteri. Dichiari char * s = new char; In questo modo puoi inserire quanti caratteri vuoi fino allo spazio.

Se tu dai in input

Ciao ciao

cout << s; produrrà solo Ciao.



Questo for (che può essere trasformata in while e do while) ti permette di scorrere la stringa

for (int i = 0; s[i] != '\0'; ++i)

{....}
guildenstern70
2010-01-08 11:40:51 UTC
La cin.getline() prende come parametri non la lunghezza della stringa che l'utente inserirà, ma bensì la lunghezza del buffer che tu gli metti a disposizione - cioè la lunghezza massima permessa.



Dopo di che, con , puoi agevolmente giocare con la stringa immessa per vedere se è palindroma. Ad esempio, puoi controllare solo i caratteri, evitando di contare tabulatori e spazi...



Ad esempio:



#include

#include



using namespace std;



# define MAX_STRING_LEN80



bool ispalindromo(char* stringa)

{

bool palindromo = false;

string tempString(stringa);

int lenString = tempString.length();



cout << "La stringa ha " << lenString << " caratteri";



for (int counter = 0; counter < lenString; counter++)

{

if (tempString.at(counter) == tempString.at(lenString-counter-1))

{

palindromo = true;

}

else

{

break;

}

}



return palindromo;

}



int main(int argc, char* argv[])

{

cout << "Inserisci una stringa> ";



char inputstring[MAX_STRING_LEN];

cin.getline(inputstring, MAX_STRING_LEN);

cout << "Hai inserito la stringa [" << inputstring << "] " << endl;



if (ispalindromo(inputstring))

{

cout << " ed e' palindroma." << endl;

}

else

{

cout << " e NON e' palindroma." << endl;

}



return 0;

}
anonymous
2010-01-08 11:24:03 UTC
dichiara una variabile che ti dice una grandezza abbastanza grande. tipo N=100

in modo che hai a disposizione 100 "caselline"

poi casomai fai un ciclo for con la condizione che il carattere inserito sia diverso dal carattere nullo e la grandezza della frase non sia maggione di N

poi nn so.

io con il c++ sto alle prime armi!


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...