PDA

View Full Version : [C] gestione stringhe


xHombrex
16-02-2009, 16:41
Ciao a tutti,avrei un problemino..
dovrei leggere da input una stringa del tipo elemento comando elemento e a seconda dei casi fare delle operazioni: mi spiego meglio :
devo innanzitutto leggere la prima parte della stringa se questa è = ad un certo comando allora passa in uno switch a parte,altrimenti compie altre operazioni

io avevo pensato ad una cosa del tipo
while(s=getchar() != '\n');

stringa = read_name(s);


comando = strtok(stringa, " ");

if (strcmp(comando,var1) == 0)
ENTRA IN UNO SWITCH


la funzione read_name mi crea una stringa e mi restituisce un puntatore ad essa...
ho pensato di usare strtok perchè avrei bisogno di suddividere la stringa in diverse parti perchè alcune parti rappresentano comandi e altre invece altro tipo di informazioni...
qualche aiutino?grazie mille

xHombrex
16-02-2009, 16:50
Ciao a tutti,avrei un problemino..
dovrei leggere da input una stringa del tipo elemento comando elemento e a seconda dei casi fare delle operazioni: mi spiego meglio :
devo innanzitutto leggere la prima parte della stringa se questa è = ad un certo comando allora passa in uno switch a parte,altrimenti compie altre operazioni

io avevo pensato ad una cosa del tipo
while(s=getchar() != '\n');

stringa = read_name(s);


comando = strtok(stringa, " ");

if (strcmp(comando,var1) == 0)
ENTRA IN UNO SWITCH


la funzione read_name mi crea una stringa e mi restituisce un puntatore ad essa...
ho pensato di usare strtok perchè avrei bisogno di suddividere la stringa in diverse parti perchè alcune parti rappresentano comandi e altre invece altro tipo di informazioni...
qualche aiutino?grazie mille


se provo con while(isspace(s=getchar())

funziona nel senso che mi crea un set di caratteri fino a che non arriva allo spazio e poi riesco a gestirla...il problema è che io voglio prendere tuta la stringa intera argomenti dei comandi e comandi ARG COMANDO ARG e poi potermeli gestire comodamente in modo da poterci effettuare delle operazioni...dividerli in token sarebbe la sol migliore ma con quel pezzo di codice cosa fa arriva ad ARG e basta!io invece avrei bisogno di una funzione che mi prenda tutta la stringa e poi possa gestirla in token.....ah senza usare gets!!perchè mi è stato proibito...solo getchar e scanf

cionci
16-02-2009, 17:13
Per leggere la stringa ti consiglio fgets: http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html
Passa stdin come terzo parametro.

fgets(buffer, dimensione_buffer, stdin);

xHombrex
16-02-2009, 17:21
Per leggere la stringa ti consiglio fgets: http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html
Passa stdin come terzo parametro.

fgets(buffer, dimensione_buffer, stdin);

non posso usare neanche quella :muro:

xHombrex
16-02-2009, 19:03
OK credo che userò questa funzione read_string() in questo modo :




char *read_string()
{

int eof = 0;
char *line;
int i, s = 16;
char c;
if (eof) {
return NULL;
}
line = malloc(sizeof(char) * s);
for (i = 0; 1; i++) {
if (i + 1 >= s) {
s *= 2;
line = realloc(line, s);
}
c = getchar();
switch (c) {
case '\n':
line[i] = '\0';
return line;
case EOF:
eof = 1;
if (i == 0) return NULL;
line[i] = '\0';
return line;
default:
line[i] = c; break;
}
}


}









while((stringa = read_string()) != NULL);



printf("%s",stringa);


token1 = strtok(stringa, " ");
token2 = strtok(stringa, " ");
token3 = strtok(stringa, "");

printf("%s \n",token1);
printf("%s \n",token2);
printf("%s \n",token3);






il problema è che ora però non mi stampa nulla!rimane sempre in attesa che inserisca input e in pratica non termina mai...dove sbaglio?

cionci
16-02-2009, 19:20
Scusa, ma allora simula la fgets con getchar...

xHombrex
16-02-2009, 19:23
Scusa, ma allora simula la fgets con getchar...

cioè...?
il problema è che con quella comoda funzione leggo tutta la mia stringa per intero e poi la tokenizzo...