PDA

View Full Version : Il c e le stringhe


Edde
30-11-2003, 15:43
Ciao :)

Sto facendo una tesina e ho un problema (uno... diciamo uno dei tanti :p ).

Devo realizzare il gioco del tris.
Il programma chiede la mossa al giocatore(nel formato "battaglia navale", "A1", "B3" e cose del genere) e la schiaffa in una stringa.
A quel punto devo estrarre separatamente i due caratteri e tradurli in coordinate "riga-colonna".
Con il primo carattere e' semplice: mi basta fare un confronto con stringa[0] e il gioco e' fatto (ad es: if(stringa[0] == 'A') riga = 0).
Col secondo e' piu' complicato, perche' dovrei prima convertirlo in un intero. La funzione di conversione (atoi se non mi ricordo male) vuole in imput una stringa: se quindi gli passo stringa[1] non fa niente...
L'unico metodo che ho trovato e' stato quello di copiare il numero in una nuova stringa di appoggio ( temp[0]=stringa[1] ) e poi concertire quest'ultima (int colonna = atoi(temp) ).
Pero' mi sembra inutilmente macchinoso...

Il problema e' che questi qui ci fanno fare java per 2 anni, e poi ti dicono "Voi non avete mai studiato c, e noi adesso non ve lo spieghiamo. Pero' dovete portare una bella tesina in c, altrimenti l'esame di sistemi operativi ve lo scordate..."
E poi a uno gli vengono questi dubbi esistenziali :D

Un'altra cosa.
Nel programma due processi si scambiano le mosse unsando la memoria condivisa. Considerato che la mossa e' una stringa di 3 caratteri (2 utili, piu' quello standard di fine stringa), la memoria dovrebbe essere di 3 byte, giusto?

Grazie :)

Luc@s
30-11-2003, 16:26
prova con
int col = (int) stringa[1];

Ziosilvio
30-11-2003, 22:06
Se il set di caratteri che usi è ASCII, puoi usare un po' di trucchetti.
Nel codice ASCII, le dieci cifre decimali sono una dopo l'altra, così anche le ventisei lettere maiuscole e le ventisei minuscole.
Per cui, un codice del tipo:

if (stringa[0]=='A') riga=0;
if (stringa[0]=='B') riga=1;
if (stringa[0]=='C') riga=2;
...
if (stringa[0]=='Z') riga=25;

si può sintetizzare in:

if (stringa[0]>='A' && stringa[0]<='Z')
riga = stringa[0] - 'A';


Per leggere la colonna, una cosa che dovrebbe funzionare è:

colonna = atoi(stringa+1);

cioè chiamare atoi() a partire dalla posizione 1 di stringa (anziché dall'inizio).
EDIT: questo funziona a patto che la sequenza di input sia memorizzata in una stringa vera e propria, con carattere nullo finale.

Edde
02-12-2003, 15:15
Funziona :)

Grazie :D