Lavorare con le stringhe in C

di il
1 risposte

Lavorare con le stringhe in C

Ciao a tutti sono un programmatore VB e sto cercando di imparare il C. Mi trovo in difficoltà con l'elaborazione delle stringhe...
Vorrei sapere se è possibile passare una stringa ad una funzione senza che questa venga modificata senza l'utilizzo di const.
Adesso mi spiego meglio...
In vb se voglio convertire tutti i caratteri di una stringa in minuscolo faccio così: A = lcase(B).
In questo modo nella variabile A ho la stringa in minuscolo e in B la stringa originale.
Per riprodurre lo stesso risultato in c come faccio???
Vi posto il codice che ho scritto:

#include <stdio.h>
#include <ctype.h>
char *locase(char *str);
int main()
{
char a[] = "Im A sTRing";
char *b = NULL;
printf("a = %s - b =%s\n",a,b);
b=locase(a);
printf("a = %s - b =%s\n",a,b);
}

char *locase(str) /* convert string to lowercase */
char *str;
{
char *start;
start = str;
while (*str) {
if (isupper(*str))
*str = tolower(*str);
str++; }

return(start);
}

Con questo esempio sai la variabile a che la b risultano convertite in minuscolo...

Aiuto!!!

-_- Baciamo le mani -_-

1 Risposte

  • Re: Lavorare con le stringhe in C

    <pre id=code><font face=courier size= id=code>
    #include <stdio.h>
    #include <ctype.h>
    #include <malloc.h>

    void locase(char *str);
    int main()
    {
    char a[] = "Im A sTRing";
    char *b = NULL;
    char *c = (char *)alloca(1024);

    sprintf(c, "a = %s - b =%s\n", a, b);
    locase(c);
    // ...
    }

    void locase(char *str)
    {
    char *start = str;

    while (*start)
    {
    *start = tolower(*start);
    start++;
    }
    }
    </font id=code></pre id=code>

    Ho fatto alcune modifiche. In primo luogo, non è una buona idea di incrementare il puntatore *str nella funzione locase(). Poi mancava l'assegnamento della stringa a un buffer, almeno quel che ho capito io, l'ho chiamato *c. Comunque ora puoi anche fare locase(a) senza effetti collaterali, ed usare printf() o sprintf() dopo la conversione.

    Se non usi VS6, alloca() potrebbe non funzionare, quindi si deve usare malloc() e dopo free(), per liberare la memoria.

    Per la funzione locase conviene usare void, perché il puntatore in ingresso è lo stesso come in uscita, il codice risulta più leggibile e flessibile.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
Devi accedere o registrarti per scrivere nel forum
1 risposte