[RISOLTO]programmazione c++ array di caratteri

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

[RISOLTO]programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Salve a tutti, essendo ancora un principiante ho dei problemi con le stringhe. Il testo di un programma mi chiede di restituire il numero di occorrenze di un carattere in una parola. Potreste dirmi come si fa ?

io avevo pensato di usare la funzione strlen. Ecco come avevo pensato :

Codice: Seleziona tutto

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main(){

	char s[80];
	char c[80];
	
	cout << "Immetti la stringa : ";
	gets(s);
	cout << endl;
	
	cout << "Quale carattere vorresti cercare ?"<<endl;
	gets(c);
	cout << endl;
	
	int carattere;
	
	for(int i=strlen(s); i>=0; i++) 
	{
		if(s[i]=c[i])
		{
			carattere++;
		}
	}

}


Potreste aiutarmi voi ? :cry: :cry: :cry:
Ultima modifica di vfabrisv94 il giovedì 21 maggio 2015, 10:04, modificato 6 volte in totale.
Avatar utente
carved top
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2179
Iscrizione: domenica 27 maggio 2012, 11:38
Desktop: Pantheon
Distribuzione: Elementary 0.4 Loki x86_64

Re: Aiuto programmazione c++ stringhe

Messaggio da carved top »

I listati di codice, come anche gli output del terminale, vanno racchiusi nel tag codice: clicca il tasto modifica, seleziona il testo e premi il tasto "codice" :ciao:

EDIT: inoltre, come da regolamento, titoli generici o contenenti "aiuto" andrebbero evitati
"It's 106 miles to Chicago, we got a full tank of gas, half a pack of cigarettes, it's dark and we're wearing sunglasses." "Hit it!"
Ubuntu custom | Fractal Design Node 202 | AMD Ryzen 5 1600 & Cryorig C7 | Sapphire Radeon RX 580 Nitro + | Crucial Ballistix Sport 8 GB @ 3000MHz
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: programmazione c++ stringhe

Messaggio da vaeVictis »

Ciao :)
Una domanda "preambolica". Quelle che stai usando non sono "stringhe" ma array di caratteri.
Faccio questa precisazione perché stai usando il C++ e, programmando usando le potenzialità di questo linguaggio (leggi pure la libreria standard), per fare quello che stai cercando di fare si imposta la soluzione in modo diverso.
Il tuo codice, a occhio, sembra un ibrido tra il C e il C++.

Pertanto la risposta alla domanda sul "come fare", dipende molto da come tu vuoi impostare le cose.
C++ "puro"? O un ibrido?

Fai chiarezza su questo punto e poi ti "aiuto" :)
:ciao:
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

preferirei il c++ "puro"
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Nessuno saprebbe aiutarmi ?
minomic
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 304
Iscrizione: giovedì 26 maggio 2011, 14:19
Desktop: cinnamon
Distribuzione: Linux Mint 17.2 Rafaela x86_64

Re: programmazione c++ array di caratteri

Messaggio da minomic »

Ciao,

questo può essere un esempio di codice corretto. Osserva bene le differenze, perché c'erano alcuni errori.

Codice: Seleziona tutto

#include <iostream>
#include <string>

using namespace std;

int main()
{

     string s;
     char c;

     cout << "Immetti la stringa : ";
     getline(cin, s);
     cout << endl;

     cout << "Quale carattere vorresti cercare? " << endl;
     cin >> c;
     cout << endl;

     int carattere = 0;

     for(unsigned int i = 0; i < s.size(); i++) {
          if(s[i] == c) {
               carattere++;
          }
     }

     cout << "Numero di occorrenze: " << carattere << endl;

     return 0;
}
Avatar utente
carved top
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2179
Iscrizione: domenica 27 maggio 2012, 11:38
Desktop: Pantheon
Distribuzione: Elementary 0.4 Loki x86_64

Re: programmazione c++ array di caratteri

Messaggio da carved top »

Gli up delle discussioni sono consentiti soltanto ogni 24 ore.
"It's 106 miles to Chicago, we got a full tank of gas, half a pack of cigarettes, it's dark and we're wearing sunglasses." "Hit it!"
Ubuntu custom | Fractal Design Node 202 | AMD Ryzen 5 1600 & Cryorig C7 | Sapphire Radeon RX 580 Nitro + | Crucial Ballistix Sport 8 GB @ 3000MHz
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: programmazione c++ array di caratteri

Messaggio da vaeVictis »

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

Codice: Seleziona tutto

  n = count(tmp.begin(), tmp.end(), toFind);
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.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Esercizio c++ array di caratteri problema con la funzione

Messaggio da vfabrisv94 »

Salve a tutti, ecco il testo del programma che dovrei fare :

Siano assegnati in ingresso, da tastiera, una parola ed un carattere. Si progetti una funzione CONTA
che riceva in ingresso la parola ed il carattere e restituisca come valore di ritorno il numero di
occorrenze del carattere nella parola.
Nel main bisognerà leggere, con una opportuna funzione, la parola ed il carattere e bisognerà
stampare un opportuno messaggio per comunicare l'esito della funzione CONTA.

Praticamente sarei bloccato perchè non so usare bene i puntatori, oppure ho commesso quache errore. Vi mostro come ho fatto io.

Codice: Seleziona tutto

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;


int CONTA(char* s[80],char* c){

	int carattere;

	for(int i=0; i<strlen(*s); i++)
	{
		if(s[i]==c)
		{   carattere=0;
			carattere++;
		}
	}

	return carattere;


}

int main(){

	char s[80];
	char c;

	cout << "Immetti la stringa : ";
	gets(s);
	cout << endl;

	cout << "Quale carattere vorresti cercare ?"<<endl;
	cin>>c;
	cout << endl;


	cout << "Il carattere compare"<< CONTA<<endl;
}

Potete dirmi dove sbaglio ? Perchè a me ritorna sempre 1 :cry:
Come dovrei fare ?
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Grazie mille delle risposte
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: programmazione c++ array di caratteri

Messaggio da vaeVictis »

Mi riaffaccio giusto per concludere quanto rimasto aperto sulla funzione inputFree.
Io la generalizzerei così:

Codice: Seleziona tutto

void inBufferFree(istream &input) {
  while( input.get() != '\n');
}
e per chiamarla, gli passerei direttamente "cin" come parametro:

Codice: Seleziona tutto

  inBufferFree(cin);
In questo modo, non ti svuota solo lo standard input, ma un generico stream in input (dove per svuota si intende che legge e ignora tutto fino a che non trova un a capo).
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
minomic
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 304
Iscrizione: giovedì 26 maggio 2011, 14:19
Desktop: cinnamon
Distribuzione: Linux Mint 17.2 Rafaela x86_64

Re: programmazione c++ array di caratteri

Messaggio da minomic »

Se ti ritieni soddisfatto delle risposte ricevute, dovresti aggiungere [Risolto] all'inizio del titolo del primo post.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Esercizio c++ array di caratteri problema con la funzion

Messaggio da Zoff »

vfabrisv94 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4759796#p4759796][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Salve a tutti, ecco il testo del programma che dovrei fare :

Siano assegnati in ingresso, da tastiera, una parola ed un carattere. Si progetti una funzione CONTA
che riceva in ingresso la parola ed il carattere e restituisca come valore di ritorno il numero di
occorrenze del carattere nella parola.
Nel main bisognerà leggere, con una opportuna funzione, la parola ed il carattere e bisognerà
stampare un opportuno messaggio per comunicare l'esito della funzione CONTA.

Praticamente sarei bloccato perchè non so usare bene i puntatori, oppure ho commesso quache errore. Vi mostro come ho fatto io.

Codice: Seleziona tutto

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;


int CONTA(char* s[80],char* c){

	int carattere;

	for(int i=0; i<strlen(*s); i++)
	{
		if(s[i]==c)
		{   carattere=0;
			carattere++;
		}
	}

	return carattere;


}

int main(){

	char s[80];
	char c;

	cout << "Immetti la stringa : ";
	gets(s);
	cout << endl;

	cout << "Quale carattere vorresti cercare ?"<<endl;
	cin>>c;
	cout << endl;


	cout << "Il carattere compare"<< CONTA<<endl;
}

Potete dirmi dove sbaglio ? Perchè a me ritorna sempre 1 :cry:
Come dovrei fare ?

Così non richiami la funzione:

Codice: Seleziona tutto

cout << "Il carattere compare"<< CONTA<<endl;
Forse intendevi:

Codice: Seleziona tutto

cout << "Il carattere compare"<< CONTA(&s,&c) <<endl;
Dubito che quello sia il codice che fai girare.

Comunque se inizializzi a 0 una variabile prima di incrementarla è normale che dia sempre 1.

Codice: Seleziona tutto

      {   carattere=0;
         carattere++;
      }

Trattandosi praticamente dello stesso problema dell'altra discussione unisco.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: [RISOLTO]programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Zoff scusami ma così non riesce a compilare se aggiungo "&". come mai ?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: programmazione c++ array di caratteri

Messaggio da Zoff »

posta codice ed errore
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Codice: Seleziona tutto

   #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;


    int CONTA(char* s[80],char &c){

       int carattere;

       for(int i=0; i<strlen(*s); i++)
       {
       	  carattere=0;
			 		
          if(c=*s[i])
          {   
             carattere++;
          }
       }

       return carattere;


    }

    int main(){

       char s[80];
       char c;

       cout << "Immetti la stringa : ";
       gets(s);
       cout << endl;

       cout << "Quale carattere vorresti cercare ?"<<endl;
       cin>>c;
       cout << endl;


       cout << "Il carattere compare"<< CONTA(&s,&c)<<endl;
    }

Errore :

40 52 [Error] cannot convert 'char (*)[80]' to 'char**' for argument '1' to 'int CONTA(char**, char&)'
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: programmazione c++ array di caratteri

Messaggio da Zoff »

Se non sai usare i puntatori perché usi * e &?

Usa nella definizione:

Codice: Seleziona tutto

int CONTA(char s[80], char c)
e dove lo usi:

Codice: Seleziona tutto

CONTA(s,c);
Initializza la variabile carattere PRIMA del ciclo for, e controlla che dentro l'if non ci sia un assegnamento ma una uguaglianza.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Adesso da questo errore:

[Error] ld returned 1 exit status
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: programmazione c++ array di caratteri

Messaggio da Zoff »

Gli errori vanno sempre riportati interamente e va postato anche il codice che li genera.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: programmazione c++ array di caratteri

Messaggio da vfabrisv94 »

Codice: Seleziona tutto

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;


    int CONTA(char s[80],char c){

       int carattere;

       for(int i=0; i<strlen(s); i++)
       {
       	  carattere=0;
			 		
          if(c==s[i])
          {   
             carattere++;
          }
       }

       return carattere;


    }

    int main(){

       char s[80];
       char c;

       cout << "Immetti la stringa : ";
       gets(s);
       cout << endl;

       cout << "Quale carattere vorresti cercare ?"<<endl;
       cin>>c;
       cout << endl;


       cout << "Il carattere compare"<< CONTA(s,c)<<endl;
    }

Errori :

c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe cannot open output file C:\Users\squire94\Desktop\aa.exe: Permission denied
C:\Users\squire94\Desktop\collect2.exe [Error] ld returned 1 exit status
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti