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
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?
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...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.