|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Il c e le stringhe
Ciao
Sto facendo una tesina e ho un problema (uno... diciamo uno dei tanti 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 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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
prova con
int col = (int) stringa[1];
__________________
Gnu/Linux User
|
|
|
|
|
|
#3 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
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: Codice:
if (stringa[0]=='A') riga=0; if (stringa[0]=='B') riga=1; if (stringa[0]=='C') riga=2; ... if (stringa[0]=='Z') riga=25; Codice:
if (stringa[0]>='A' && stringa[0]<='Z')
riga = stringa[0] - 'A';
Codice:
colonna = atoi(stringa+1); EDIT: questo funziona a patto che la sequenza di input sia memorizzata in una stringa vera e propria, con carattere nullo finale. Ultima modifica di Ziosilvio : 01-12-2003 alle 20:41. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Funziona
Grazie |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:09.



















