Ciao ,
Vorrei provarci anche io. Non credo di suggerire nulla visto che sono all'inizio
riporto qui il testo:
FND1 ha scritto:
Ciao a tutti, ho il seguente programma da scrivere: scrivere un programma in C++ che, letti da input un intero positivo N, un intero positivo M e una stringa di al più 100 caratteri, stampi “OK” se esistono almeno N vocali che precedono di esattamente M consonanti un’altra vocale e stampi “NO” altrimenti. Si può supporre che la stringa contenga solo lettere dell’alfabeto minuscole.
mi sembra di capire che le vocali per il testo sono tutte uguali. Vuole trovare
almeno un tot di vocali seguite da una tot
esatto di consonanti a loro volta
seguite da almeno una vocale.(1)
Visto che le vocali sono tutte uguali , io le converto in un unico carattere. Lo stesso vale per le consonanti.
Mantengo numero di vocali e consonanti presenti nella stringa originale. Vuole una stringa di 100 chars, ma per fare un esempio , la scegliere più breve.
M e N che sono i valori scelti dall'utente che andranno a formare un pattern
esempio : allego immagine , non mi fa scrivere certi caratteri , non so quali
voi che ne pensate?
#include "pch.h"
#include <iostream>
#include <string>
#include <cstddef>
#include <algorithm>
using namespace std;
int main()
{
int nVocali;
cout << "Digitare un intero positivo N vocali:> ";
cin >> nVocali;
int nConsonanti;
cout << "Digitare un intero positivo N consonanti:> ";
cin >> nConsonanti;
cout << endl;
//Stringa di esempio
string centoChars("Xaaaacccexxxiiiivvvoxxxeeeekkk");
cout << "Stringa originale: " << centoChars << endl;
char delimitatore = 'z';
centoChars += delimitatore;
//Convertiamo tutte le vocali in '$'
std::size_t vocali= centoChars.find_first_of("aeiou");
while (vocali != string::npos)
{
centoChars[vocali] = '$';
vocali = centoChars.find_first_of("aeiou", vocali + 1);
}
//Convertiamo anche le consonanti. Otteniamo l'indice di ogni carattere di centoChars.
//Tutti i caratteri diversi da $ diventano consonanti.
int pos;
for (char& id : centoChars) {
pos = &id - ¢oChars[0];
if (id != '$') centoChars.replace(pos, 1, "+");
}
//Creiamo il nostro pattern con dimensioni dipendenti dalle scelte precedenti dell'utente
string pattern = string(nVocali, '$') + string(nConsonanti, '+');
cout << "Stringa convertita: " << centoChars << endl;
cout << "Pattern: " << pattern << endl;
//Inizio la ricerca del pattern
size_t patternPos = centoChars.find(pattern);
char checkVocaleDopoConsonanti = centoChars.at(patternPos + pattern.length());
if (checkVocaleDopoConsonanti == '$') cout << "Trovato pattern alla pos: " << patternPos << endl;
while (patternPos != string::npos) {
patternPos = centoChars.find(pattern, patternPos + 1);
checkVocaleDopoConsonanti = centoChars.at(patternPos + pattern.length());
if (checkVocaleDopoConsonanti == '$') cout << "Trovato pattern alla pos: " << patternPos << endl;
}
return 0;
}