Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    C++ programma che conta quante volte c'è una parola (in input) dentro un file

    salve a tutti, devo risolvere questo problema per l universita:
    "Calcola quante volte una parola, data in input dall'utente, è presente nel testo iniziale. Non distingue fra maiuscole e minuscole."
    non riesco a risolvere questa precisa parte " non distingue fra minuscole e maiuscole" cosi ho pensato di usare tolower() ma mi da errore di compilazione....

    questo è quello che ho fatto ( notare che ho incluso librerie che non servono per questa funzione, ma mi servono per altre funzioni non ancora fatte )

    MAIN
    codice:
    // Main
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <ctype.h>
    #include "header.h"
    using namespace std;
    
    int main(){
        
        ifstream in_data;
        // funzione che chiede
            // all'utente quale
        // file vuole aprire
        get_data(in_data);
        //funzione che conta quante volte
        //la parola immessa dall'utente compare
        cout<<"la parola precedentemente messa compare nel testo "<<WordCounter(in_data)<<" volte"<<endl;
        
    }
    FUNZIONI
    codice:
    //Funzioni
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <ctype.h>
    #include "header.h"
    using namespace std;
    
    //funzione che chiede all'utente quale file aprire
    // e lo apre
    void get_data(ifstream& resultingStream)
    {
        string fileName;
        do 
        {
            cout<<"Inserisci il nome del file contenente i dati: ";
            cin>>fileName;
            resultingStream.open(fileName.c_str());
        } 
        
        while (resultingStream.fail());
    }
    
    // ************************************************************************
    
    //funzione che chiede all'utente una parola
    // e conta quante ce ne sono nell file in input
    int WordCounter (ifstream& in_data){
        string word;
        string otherword;
        int cont=0;
        vector<string>vectword;
        vector<string>vectotherword;
        cout<<"inserisci una parola per vedere quante volte compare nel testo"<<endl;
        cin>>word;
        // funzione della libreria <ctype.h>
        // che trasforma le lettere maiuscole 
        // in lettere minuscole
        vectword.push_back(tolower(word));
        while (in_data>>otherword){
            // stessa funzione applicata
            // nella riga 40
            
            vectotherword.push_back(tolower(otherword));
        }
        for(int i=0; i < vectotherword.size(); i++){
            if(vectword[0] == vectotherword[i]){
                cont++;
            }
        }
        return cont;
    }
    HEADER
    codice:
    // Header
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <ctype.h>
    using namespace std;
    
    // funzione che chiede all'utente
    // il nome del file e lo apre
    void get_data(ifstream& resultingStream);
    
    // funzione che chiede all'utente
    // di inserire una parola per
    // vedere quante volte compare
    // nel testo del file aperto
    // chiesto in precedenza
    int WordCounter (ifstream& in_data);
    ringrazio di cuore tutti quelli che mi risponderanno, saluti

  2. #2
    ho appena provato a fare cosi, aggiungendo un altra funzione (continua a non funzionare tolower() ):


    codice:
    //funzione che chiede all'utente una parola
    // e conta quante ce ne sono nell file in input
    int WordCounter (ifstream& in_data){
        //dichiarazioni
        string word;
        string otherword;
        int size;;
        int cont=0;
        vector<string>vectword;
        vector<string>vectotherword;
        //svolgimento
        cout<<"inserisci una parola per vedere quante volte compare nel testo"<<endl;
        cin>>word;
        size= word.length();
        vectword.push_back(swaptolower(size,word));
        
        while (in_data>>otherword){
    
            size = otherword.length();
            vectotherword.push_back(swaptolower(size,otherword));    
        }
    
        for(int i=0; i < vectotherword.size(); i++){
            if(vectword[0] == vectotherword[i]){
                cont++;
            }
        }
        return cont;
    }
    
    string swaptolower(int size,string word){
        char *c;
        c = new char[size];
    
        for ( int k =0 ; k < size; k++){
            c[k]=tolower(c[k]);
            word+=c[k];
        }
        delete c;
        c = NULL;
        return word;
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    tolower opera su un solo carattere, non su una stringa.

    Devi prevedere un ciclo ma il tolower deve operare sulla stringa word non su c che hai allocato, è vuota e non c'entra nulla con word
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    tolower opera su un solo carattere, non su una stringa.

    Devi prevedere un ciclo ma il tolower deve operare sulla stringa word non su c che hai allocato, è vuota e non c'entra nulla con word
    grazie, la stanchezza mi aveva fregato, mi sono accorto appunto che l'array era vuoto solo dopo 2 ore :')

    PER CHIUNQUE ABBIA AVUTO IL MIO PROBLEMA, HO RISOLTO CON:
    codice:
    string swaptolower(int size,string word){
        vector<char> vettore(word.begin(), word.end());
        for ( int k =0 ; k <= size; k++){
            vettore[k]=tolower(vettore[k]);
        }
        string zeta(vettore.begin(), vettore.end());
        word = zeta;

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ma no, ti bastano due righe

    codice:
    void swaptolower(string &word)
    {
        for(int k=0; k<word.length(); k++)
            word[k]=tolower(word[k]);
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.