Pagina 1 di 1
[Risolto] c conta spazi bianchi
Inviato: domenica 8 giugno 2014, 14:10
da shivi_ubuntu
ho questo piccolo programma che conta quanti spazi bianchi ci sono in una stringa però come risultato mi da 2 invece di 5 perchè ? io uso c++ ma ho voluto vedere una cosa in c
Codice: Seleziona tutto
#include <iostream>
#include <cstring>
using namespace std;
typedef char* str;
int countWhiteSpace(str yourString){
int countNum = 0;
for(int i(0);i < (int) sizeof(yourString);i++){
if(yourString[i] == ' '){
countNum += 1;
}
}
return countNum;
}
int main(){
str stringToCountForWhiteSpace = "let see how many white spaces";
printf("this string contains %d white spaces ",countWhiteSpace(stringToCountForWhiteSpace));
return 0;
}
Re: c conta spazi bianchi
Inviato: domenica 8 giugno 2014, 15:19
da 1001001
Ciao!
Ma che linguaggio stai usando?? Non è C, non è C++..usi i namespaces ma poi usi
printf, includi
iostream e
cstring ma poi dichiari il tipo stringa come
char*...e poi come lo compili? La funzione
printf è in
stdio.h, non in
iostream
Comunque il (un) problema è che
sizeof restituisce la dimensione
in byte dell'oggetto che gli passi (in questo caso un
char*, quindi di norma 8 byte), non il numero di elementi nell'array di caratteri che usi come tipo stringa. Quindi ammesso che tu riesca a compilarlo e farlo andare, il ciclo
arriva fino a
i = 7, cioè fino allo spazio fra "see" e "how" compreso...cosa che spiega perché conta solo due spazi bianchi
Re: c conta spazi bianchi
Inviato: domenica 8 giugno 2014, 15:44
da vbextreme
per correttezza questo è c
Codice: Seleziona tutto
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int countWhiteSpace(const char* yourString)
{
int i;
for (i = 0; *yourString != '\0'; yourString++)
if ( *yourString == ' ') ++i;
return i;
}
int main()
{
char* stringToCountForWhiteSpace = "let see how many white spaces";
printf("this string contains %d white spaces ",countWhiteSpace(stringToCountForWhiteSpace));
return 0;
}
Re: c conta spazi bianchi
Inviato: domenica 8 giugno 2014, 16:52
da shivi_ubuntu
1001001 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4595857#p4595857][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ciao!
Ma che linguaggio stai usando?? Non è C, non è C++..usi i namespaces ma poi usi
printf, includi
iostream e
cstring ma poi dichiari il tipo stringa come
char*...e poi come lo compili? La funzione
printf è in
stdio.h, non in
iostream
Comunque il (un) problema è che
sizeof restituisce la dimensione
in byte dell'oggetto che gli passi (in questo caso un
char*, quindi di norma 8 byte), non il numero di elementi nell'array di caratteri che usi come tipo stringa. Quindi ammesso che tu riesca a compilarlo e farlo andare, il ciclo
arriva fino a
i = 7, cioè fino allo spazio fra "see" e "how" compreso...cosa che spiega perché conta solo due spazi bianchi
quello è il linguaggio c++ e basta che includi iostream sei apposto cstring è del linguaggio c lo uso perchè sto usando la funzione strlen cmq io stavo leggendo un libro sul linguaggio c++ ma poi ho voluto vedere una cosa in c e ho scritto quel programma anche la direttiva iostream ti permette di usare sia printf e scanf e cout del c++ e using namespace std si usa per non scrivere tutte le volte std::cout eccc okk
se usi windows devi usare stdio.h se no non riesci usare la funzione printf cmq leggi un libro sul linguaggio c e c++
Re: c conta spazi bianchi
Inviato: domenica 8 giugno 2014, 17:06
da shivi_ubuntu
ecco cosa ho cambiato ed è tutto apposto
Codice: Seleziona tutto
#include <iostream>
#include <cstring>
using namespace std;
typedef const char* strtype;
int countWhiteSpace(strtype yourString){
int countNum = 0;
for(int i(0);i < strlen(yourString);i++){
if(yourString[i] == ' '){
countNum++;
}
}
return countNum;
}
int main(){
strtype stringToCountForWhiteSpace = "let see how many white spaces";
printf("this string contains %d white spaces \n",countWhiteSpace(stringToCountForWhiteSpace));
cout << "this string contains " << countWhiteSpace(stringToCountForWhiteSpace) << " white spaces " << endl;
return 0;
}
Re: c conta spazi bianchi[RISOLTO]
Inviato: lunedì 9 giugno 2014, 5:38
da vbextreme
ecco cosa ho cambiato ed è tutto apposto
contento tu...
Re: [Risolto] c conta spazi bianchi
Inviato: lunedì 9 giugno 2014, 18:57
da Mdfalcubo
shivi_ubuntu ti ricordo, visto che non lo fai mai, che il risolto va messo a inizio titolo e in minuscolo. Grazie.
Re: c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 19:35
da vaeVictis
L'inizializzazione della variabile i all'interno della condizione del ciclo for è un po' "bizzarra", oltre che fortemente sconsigliabile.
Prendine l'abitudine... poi mandami un filmino con le bestemmie mentre fai un debug.
Re: [Risolto] c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 21:44
da vbextreme
tutte le variabili inerenti al ciclo le inizializzo all'interno di esso, come avrai notato uso anche il controllo superfluo \0 anchesso per migliorare la leggibilità.
Quando faccio un software serio il debugger lo uso una sola volta alla fine di tutto per un controllo approfondito, diciamo che da quando programmo col c il debugger é divenuta l'ultima spiaggia spesso sintomo di una cattiva strutturazione o ancor piu spesso una ancor peggiore progettazione.
Finisco qui perché l'argomento é vasto.
Re: [Risolto] c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 21:52
da vaeVictis
Contento tu

Re: [Risolto] c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 21:53
da jackynet92
Evitate di continuare a discutere sul topic. L'utente che l'ha aperto non è più intervenuto dopo il risolto.
Re: [Risolto] c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 22:01
da vaeVictis
Quindi se un utente non risponde più in una discussione, non si possono più fare interventi di natura tecnica?
Ok. Recepito.
Re: [Risolto] c conta spazi bianchi
Inviato: martedì 10 giugno 2014, 22:04
da jackynet92
@vaeVictis
Non è quello che intendevo. Semplicemente state discutendo di un argomento al quale l'utente interessato non ha ancora risposto e visto che non si è al bar, sarebbe preferibile evitare di allungare discussioni già risolte.