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

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

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

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++

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
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.

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
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.

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.