Pagina 1 di 1
[C] Stringa caratteri
Inviato: venerdì 17 gennaio 2014, 22:13
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?
Re: [C] Stringa caratteri
Inviato: venerdì 17 gennaio 2014, 22:59
da crap0101
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".
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 6:15
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".
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 7:29
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?
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 10:50
da Claudio_F
google libreria string.h

Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 13:04
da mimantico
Su internet ho gia cercato ma secondo me sono poco chiare qualcuno me lo puo spiegare qui?
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 13:55
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;
}
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 14:59
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?
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 15:16
da gila75
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.
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 16:46
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) ?
Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 16:51
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

Re: [C] Stringa caratteri
Inviato: sabato 18 gennaio 2014, 19:57
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?
Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 1:41
da crap0101
è una di quelle cose "implementation-defined"
Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 16:01
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)

Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 16:13
da crap0101
maiuscolo è minore di minuscolo, proprio per questo ritorna 1.
Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 16:20
da melfnt
Già, scusa, avevo invertito l'ordine.
Ho corretto.
Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 20:58
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

Re: [C] Stringa caratteri
Inviato: domenica 19 gennaio 2014, 21:52
da mimantico
Ok grazie, si in effetti sto aspettando "the c programming language" ce l'hai?
Re: [C] Stringa caratteri
Inviato: lunedì 20 gennaio 2014, 18:03
da gila75
Io ho "programmare in C" di N. Kim King, sto studiando su quello, e mi trovo bene
