[C] Stringa caratteri

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

[C] Stringa caratteri

Messaggio da mimantico »

Buonasera
ho alcune basi solide di C ma incontro un problema sempre più frequentemente, dovrei usare stringhe di caratteri ma non capisco dalle guide trovate online come gestirle agevolmente,

Codice: Seleziona tutto

tipovariabile A,D;
D=roma;
printf("qual'è la cappitale dell'italia? \n")
scanf(xxxxx, &A)
if(A=D)
{printf("ok " \n)
}
else
{
printf("hai sbagliato");
}
questo è un piccolo esempio inventato sul momento con errori ma il punto non è quello, qualcuno mi sa aiutare?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [C] Stringa caratteri

Messaggio da crap0101 »

mimantico [url=http://forum.ubuntu-it.org/viewtopic.php?p=4518196#p4518196][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Buonasera
ho alcune basi solide di C ma incontro un problema sempre più frequentemente, dovrei usare stringhe di caratteri ma non capisco dalle guide trovate online come gestirle agevolmente,

Codice: Seleziona tutto

tipovariabile A,D;
D=roma;
printf("qual'è la cappitale dell'italia? \n")
scanf(xxxxx, &A)
if(A=D)
{printf("ok " \n)
}
else
{
printf("hai sbagliato");
}
questo è un piccolo esempio inventato sul momento con errori ma il punto non è quello, qualcuno mi sa aiutare?
a far che? non hai detto qual'è il problema... "gestirle agevolmente" è un pò vago.
btw, spero che quella cosa orribile qua sopra sia una specie di pseudocodice, altrimenti è il caso di dare una ristrutturata alle fondamenta delle "solide basi".
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
Actarus5
Prode Principiante
Messaggi: 220
Iscrizione: mercoledì 3 luglio 2013, 17:15
Desktop: Mate
Distribuzione: Fedora
Località: Abutalabashuneba

Re: [C] Stringa caratteri

Messaggio da Actarus5 »

Nell'header string.h trovi molte funzione utili, come strcmp per confrontare 2 stringhe ( non si confrontano con == ), comunque scanf è considerata alla stregua di gets per quanto concerne le stringhe, quindi l'alternativa migliore è usare fgets oppure scriversi una funzione da soli per i casi più "esotici".
"An extremely helpful console message: “SPANK! SPANK! SPANK! Naughty programmer!”. Really, I’m not joking about that one."
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

Re: [C] Stringa caratteri

Messaggio da mimantico »

Crap0101 quel codice l'ho scritto in un secondo solo per darvi un paio idea di un tipo di utili per cui mi servirebbe,
Io vorrei usare le stringhe tipo variabili numeriche, se non è possibile, mi dite che comandi devo usare?
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [C] Stringa caratteri

Messaggio da Claudio_F »

google libreria string.h ;)
:ciao:
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

Re: [C] Stringa caratteri

Messaggio da mimantico »

Su internet ho gia cercato ma secondo me sono poco chiare qualcuno me lo puo spiegare qui?
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] Stringa caratteri

Messaggio da gila75 »

Prova questo esempio, e spulcia l'header string.h.

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char s_1[100]="ciao, mi chiamo Gila75";
    char s_2[100]="ciao, mi chiamo Gila74";
    printf ("st_1=%s\n",s_1);
    printf ("st_2=%s\n",s_2);
    if ((strcmp(s_1,s_2)==0))
     printf ("stringhe uguali\n");
    else
     printf ("stringhe non uguali\n");
   return 0;
}
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

Re: [C] Stringa caratteri

Messaggio da mimantico »

Un po' di domande:
-[100] a cosa serve?
-strcmp a cosa serve e perché deve essere uguale a 0?
-l'equivalente di "scanf"?
-altri comandi?
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] Stringa caratteri

Messaggio da gila75 »

mimantico [url=http://forum.ubuntu-it.org/viewtopic.php?p=4518527#p4518527][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Un po' di domande:
-[100] a cosa serve?
-strcmp a cosa serve e perché deve essere uguale a 0?
-l'equivalente di "scanf"?
-altri comandi?
100 riserva 100 "allocazioni" di tipo char, quindi puoi scrivere al massimo 100 caratteri incluso il carattere teminatore
char str [4]
puoi scrivere al massimo abc, la quarta posizione è riservata a '\0' (terminatore stringa)
strcmp ritorna 0 se le stringhe sono uguali <0 e e >0 a seconda dei casi se una è maggiore o minore.
scanf è pericolosa, la si può usare ma con cautela.
Si può usare fgets, o "costruire" un input con getchar() a singola lettera e accorgimenti particolari.
Mi sa che però devi approfondire un po' le stringhe, mi pare strano non conoscerle, ed affermare di avere solide basi C.
Non è una critica, ma mi sa che hai le idee un po' confuse.
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

Re: [C] Stringa caratteri

Messaggio da mimantico »

si per solide basi intendo in realtà un buon uso dei vari blocchi tipo while for ecc, aspettando il libro che dovrebbe essere più comodo cerco di imprare altre cose.
Dicendo "strcmp ritorna 0 se le stringhe sono uguali <0 e e >0 a seconda dei casi se una è maggiore o minore." iintendi come lunghezza?
Per fgets la sintassi è questa : fgets("%s", &variabile) ?
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] Stringa caratteri

Messaggio da gila75 »

Dicendo "strcmp ritorna 0 se le stringhe sono uguali <0 e e >0 a seconda dei casi se una è maggiore o minore." iintendi come lunghezza?
Per fgets la sintassi è questa : fgets("%s", &variabile) ?
In termine di codice Ascii. Se io scrivo ciao e CIAO non viene ritornato 0 perchè i caratteri maiuscoli in termini ascii hanno un
offset di 32 (in meno) rispetto a quelli minuscoli.
La fgets() non ricordo bene, ma se digiti su Google, trovi la sintassi :)
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [C] Stringa caratteri

Messaggio da Claudio_F »

dovrei usare stringhe di caratteri ma non capisco dalle guide trovate online come gestirle agevolmente
In C le stringhe non sono dati primitivi come i numeri, ma vengono "simulate" attraverso array, quindi ogni operazione su una stringa è un'operazione su uno o più array effettuata tramite un'apposita funzione della libreria string.h Mi sembra che tra i vari link ci siano delle spiegazioni semplici (non li ho sotto mano al momento), eventualmente posta quella non chiara e vediamo dov'è il dubbio.

In termine di codice Ascii. Se io scrivo ciao e CIAO non viene ritornato 0 perchè i caratteri maiuscoli in termini ascii hanno un
offset di 32 (in meno) rispetto a quelli minuscoli.
Altro problema: che codifica viene usata implicitamente nel C per rappresentare caratteri non compresi nel set ASCII?

Codice: Seleziona tutto

#include <stdio.h>
#include <string.h>

void main(void)
{
    char s[] = "€©€";

    int i = 0;
    while (s[i] != '\0') ++i;
    printf("\n\nLunghezza con strlen simulata: %d\n", i);

    i = strlen(s);
    printf("Lunghezza con strlen vera: %d\n", i);
    
    printf("\nBytes che compongono l'array:\n");
    for (i=0; i<=strlen(s); i++)
        printf("\t%d\n", 0xFF&s[i]);
}
Risultato:

Codice: Seleziona tutto

Lunghezza con strlen simulata: 8
Lunghezza con strlen vera: 8

Bytes che compongono l'array:
	226
	130
	172
	194
	169
	226
	130
	172
	0
EDIT: ok, Python mi dice che è utf-8:

Codice: Seleziona tutto

>>> tuple(ord(c) for c in u"€©€".encode("utf_8"))
(226, 130, 172, 194, 169, 226, 130, 172)
Come faccio a sapere/decidere che codifica viene/verrà usata? Dipende dall'editor? Dal compilatore?
:ciao:
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [C] Stringa caratteri

Messaggio da crap0101 »

è una di quelle cose "implementation-defined"
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [C] Stringa caratteri

Messaggio da melfnt »

Per quanto riguarda strcmp, l'ordine è quello del vocabolario.
Il confronto viene fatto carattere per carattere a partire da sinistra.

Per esempio,
strcmp ("ciao","cibo") ritorna -1, perché la "ciao" è minore di "cibo", in quanto viene prima sul dizionario.
strcmp ("ciao","CIAO") ritorna 1 (maiuscolo < minuscolo)
strcmp ("ciao","ciaomondo") ritorna -1 (a parità di caratteri, la parola più corta è minore)
strcmp("ciaomondo","ciaomondo") ritorna 0 (sono uguali)

;)
Ultima modifica di melfnt il domenica 19 gennaio 2014, 16:20, modificato 1 volta in totale.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [C] Stringa caratteri

Messaggio da crap0101 »

maiuscolo è minore di minuscolo, proprio per questo ritorna 1.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [C] Stringa caratteri

Messaggio da melfnt »

Già, scusa, avevo invertito l'ordine.

Ho corretto.
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] Stringa caratteri

Messaggio da gila75 »

@Mimantico, in attesa che ti arrivi il libro (mi pare di aver capito che lo stai aspettando), puoi iniziare a guardare qui.
é un manuale in italiano, magari non molto approfondito, e può essere che agli ochhi di un esperto sia fatto malissimo.
Quello, io non lo so, sono anche io alle prime armi.
Io l'ho stampato e spulciato in lungo e in largo, poi sono passato ad altro.
Ecco il link
http://blacklight.gotdns.org/guidac.pdf
Per iniziare, può essere utile. Studiare in rete da un sito all'altro, secondo me è impossibile :)
Spero ti sia utile :)
mimantico
Prode Principiante
Messaggi: 68
Iscrizione: sabato 11 gennaio 2014, 21:42
Desktop: Mate
Distribuzione: Debian Jessie

Re: [C] Stringa caratteri

Messaggio da mimantico »

Ok grazie, si in effetti sto aspettando "the c programming language" ce l'hai?
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] Stringa caratteri

Messaggio da gila75 »

Io ho "programmare in C" di N. Kim King, sto studiando su quello, e mi trovo bene :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti