Allora, supponendo che il tuo obiettivo sia quello di acquisire una singola parola e poi acquisire una singolo carattere di cui contare le occorrenze all'interno della parola, un suggerimento di codice potrebbe essere questo
Codice: Seleziona tutto
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
void inputFree() {
while(getchar() != '\n');
}
int main() {
string tmp;
char toFind;
size_t n;
cout << "Inserisci una stringa: ";
cin >> tmp;
inputFree();
cout << "Inserisci il carattere da cercare: ";
cin >> toFind;
inputFree();
n = count(tmp.begin(), tmp.end(), toFind);
cout << "Nella parola \"" << tmp << "\" sono presenti "
<< n << " occorrenze della lettera '" << toFind << "'" << endl;
return 0;
}
Una volta compilato, un esempio di utilizzo è il seguente:
Codice: Seleziona tutto
vaevictis@vaevictis-N56VV:~/Programmazione/C++/LeggiStringa$ ./LeggiStringaConteggiaOccorrenze
Inserisci una stringa: asdrubale
Inserisci il carattere da cercare: a
Nella parola "asdrubale" sono presenti 2 occorrenze della lettera 'a'
Per quanto riguarda il comportamento del programma: se inserisci più di una parola, le parole successive alla prima vengono ignorate; se inserisci più di un carattere, viene preso in considerazione solo il primo.
È facile modificare il programma per fargli accettare una stringa generica composta da un numero arbitrario di parole, ma mi sono attenuto alla tua richiesta.
Per quanto riguarda il conteggio delle occorrenze della lettera "toFind", come ti ho detto... se stai usando il C++ ti conviene apprendere fin da subito alcune logiche molto importanti, che sono anche alla base di una buona implementazione (dove buona si riferisce all'implementazione di codice che faccia corretto utilizzo delle funzioni della libreria).
In questo caso, basta usare il metodo "count" della libreria algorithm.
Se per caso non vuoi usare una funzione già implementata, impara fin da ora a implementare usando la logica che sta "dietro" la libreria standard.
L'iterazione su una stringa si compie usando gli iteratori, non gli indici. Nel mio codice, gli iteratori sono quelli che vedi come primi due parametri passati a count in questa istruzione
Te lo faccio presente perché
tutta la libreria standard è "pensata" in termini di iteratori.
Detto questo, se hai bisogno ti implemento anche una funzione di conteggio "nello spirito del C++", ma non so se ti interessa o se già va bene quanto hai ricevuto in risposta.
Fai sapere, ciao.
p.s.:
Come ti è stato indicato dal moderatore, cerca cortesemente di fare up della discussione non prima delle 24 ore di assenza di risposta dalla tua ultima domanda.
Io stavo lavorando per buttarti giù questo codice, ma non ho avuto modo di inoltrare il messaggio fino ad oggi.
p.p.s:
Per quanto riguarda la funzione inputFree, onestamente non mi piace come l'ho implementata, ma ho preferito inoltrare il codice, riservandomi la possibilità di tornarci sopra in un secondo momento.