Copiare caratteri minuscoli da una stringa ad un'altra

di il
4 risposte

Copiare caratteri minuscoli da una stringa ad un'altra

Ciao a tutti!!!
Come avrete potuto intuire dal titolo, vorrei scrivere un programma che riceva una stringa in input e che copi i soli caratteri minuscoli di questa stringa in una seconda stringa. Vi posto subito il codice che ho scritto:

#include<iostream>
#include<string>
using namespace std;

int main(){
	int j=0;
	string s1,s2;
	cout<<"Inserisci stringa: ";
	getline(cin,s1);
	for(int i=0;i<s1.length();i++){
		if(islower(s1[i])){
			s2[j]=s1[i];
			j++;
		}
	}
	cout<<"I caratteri minuscoli della stringa inserita sono: "<<s2;
	
	return 0;
}
Il programma però non fa quel che dovrebbe. Prende la stringa s1 in input ma quando dovrebbe stampare la stringa s2 con i soli caratteri minuscoli non stampa nulla. Non credo che il problema sia nell'assegnazione s2[j]=s1 perchè se provo a stampare un singolo carattere di s2 (per esempio "cout<<s2[3]") mi stampa correttamente il carattere minuscolo che è stato copiato in quella posizione. Credo piuttosto che il problema sia a livello di "carattere di terminazione" o qualcosa del genere, ma potrei aver detto una cavolata. Intoltre stampando "cout<<s2.length()" mi da 0 quindi sicuramente c'è qualcosa che non torna. Potrei risolvere il problema in altri modi, per esempio stampando direttamente tutti i caratteri minuscoli di s1 senza copiarli in s2. Tuttavia vorrei sapere se e come è possibile far funzionare il codice che ho scritto copiando i caratteri minuscoli di s1 in s2.
Spero di essere stato abbastanza chiaro. Grazie in anticipo a tutti!!

4 Risposte

  • Re: Copiare caratteri minuscoli da una stringa ad un'altra

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(){
    	int j = 0;
    	int a = 0;
    	string s1, s2;
    	
    	cout << "Inserisci stringa: ";
    	getline(cin, s1);
    	for (int i = 0; i < s1.length(); i++){
    
    		if ((s1[i] >= 65) && (s1[i] <= 90))
    		{
    			s2 += s1[i];
    
    
    						cout << "I caratteri minuscoli della stringa inserita sono: " << s2;
    
    
    		}
    
    	}
    		
    		
    	
    	cin >> j;
    
    	return 0;
    }
    Ovviamente questo prende le lettere maiuscole e ti lascio il resto , dovrebbe essere comprensibile aggiustarlo
  • Re: Copiare caratteri minuscoli da una stringa ad un'altra

    Ma visto che è un alternativa , ed è bene saperla , spero che wrugg25 sia d'accordo , ed ecco il codice allora corretto. 97 e 122 sono i caratteri ascii minuscoli. mentre 65 e 90 i maiuscoli.

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(){
    	int j = 0;
    	int a = 0;
    	string s1, s2;
    	
    	cout << "Inserisci stringa: ";
    	getline(cin, s1);
    	for (int i = 0; i < s1.length(); i++){
    
    		if ((s1[i] >= 97) && (s1[i] <= 122))
    		{
    			s2 += s1[i];
    
    
    						
    		}
    
    	}
    		
    		
    	cout << "I caratteri minuscoli della stringa inserita sono: " << s2;
    	cin >> j;
    
    	return 0;
    }
  • Re: Copiare caratteri minuscoli da una stringa ad un'altra

    Grazie mille!!!
    Solo una cosa, nell'esempio di Aleasia la j (ed il relativo cin>>j) credo l'abbia messo per non far chiudere subito la finestra del programma dopo l'inserimento della stringa (sotto windows). Ma quella variabile 'a=0' a cosa serve? Anche perchè non la vedo utilizzata nel codice quindi non credo serve effettivamente a qualcosa... o sbaglio? Grazie ancora
  • Re: Copiare caratteri minuscoli da una stringa ad un'altra

    Per la cin >>j è esatto . la a = 0 non centra niente.
Devi accedere o registrarti per scrivere nel forum
4 risposte