[Risolto] c conta spazi bianchi

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
shivi_ubuntu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 695
Iscrizione: venerdì 2 settembre 2011, 22:31

[Risolto] c conta spazi bianchi

Messaggio 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;
}
Ultima modifica di shivi_ubuntu il domenica 8 giugno 2014, 17:23, modificato 1 volta in totale.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: c conta spazi bianchi

Messaggio 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

Codice: Seleziona tutto

for(int i(0);i < (int) sizeof(yourString);i++)
arriva fino a i = 7, cioè fino allo spazio fra "see" e "how" compreso...cosa che spiega perché conta solo due spazi bianchi
"I find your lack of faith disturbing."
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: c conta spazi bianchi

Messaggio 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;
}

Easy framework per il linguaggio C.
vbextreme hack your life
shivi_ubuntu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 695
Iscrizione: venerdì 2 settembre 2011, 22:31

Re: c conta spazi bianchi

Messaggio 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

Codice: Seleziona tutto

for(int i(0);i < (int) sizeof(yourString);i++)
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++
Ultima modifica di shivi_ubuntu il domenica 8 giugno 2014, 17:22, modificato 3 volte in totale.
shivi_ubuntu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 695
Iscrizione: venerdì 2 settembre 2011, 22:31

Re: c conta spazi bianchi

Messaggio 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;
}
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: c conta spazi bianchi[RISOLTO]

Messaggio da vbextreme »

ecco cosa ho cambiato ed è tutto apposto
contento tu...
Easy framework per il linguaggio C.
vbextreme hack your life
Avatar utente
Mdfalcubo
Moderatore Globale
Moderatore Globale
Messaggi: 20420
Iscrizione: venerdì 26 dicembre 2008, 11:17
Desktop: Solo XFCE
Distribuzione: Xubuntu 64 bit
Sesso: Maschile

Re: [Risolto] c conta spazi bianchi

Messaggio da Mdfalcubo »

shivi_ubuntu ti ricordo, visto che non lo fai mai, che il risolto va messo a inizio titolo e in minuscolo. Grazie.
"Il genere umano è stimolante, è la gente che non sopporto,, (Linus - Peanuts)
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: c conta spazi bianchi

Messaggio da vaeVictis »

vbextreme [url=http://forum.ubuntu-it.org/viewtopic.php?p=4595866#p4595866][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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;
}

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.
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.»
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: [Risolto] c conta spazi bianchi

Messaggio 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.
Easy framework per il linguaggio C.
vbextreme hack your life
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto] c conta spazi bianchi

Messaggio da vaeVictis »

Contento tu :)
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.»
Avatar utente
jackynet92
Moderatore Globale
Moderatore Globale
Messaggi: 13413
Iscrizione: sabato 3 settembre 2011, 1:41
Desktop: Mate
Distribuzione: Ubuntu 16.04 64bit
Sesso: Maschile
Località: Torino

Re: [Risolto] c conta spazi bianchi

Messaggio da jackynet92 »

Evitate di continuare a discutere sul topic. L'utente che l'ha aperto non è più intervenuto dopo il risolto.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto] c conta spazi bianchi

Messaggio da vaeVictis »

jackynet92 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4597100#p4597100][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Evitate di continuare a discutere sul topic. L'utente che l'ha aperto non è più intervenuto dopo il risolto.
Quindi se un utente non risponde più in una discussione, non si possono più fare interventi di natura tecnica?
Ok. Recepito.
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.»
Avatar utente
jackynet92
Moderatore Globale
Moderatore Globale
Messaggi: 13413
Iscrizione: sabato 3 settembre 2011, 1:41
Desktop: Mate
Distribuzione: Ubuntu 16.04 64bit
Sesso: Maschile
Località: Torino

Re: [Risolto] c conta spazi bianchi

Messaggio 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.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti