PDA

Visualizza la versione completa : [C] Operare su argomento del main()


R.Rufino
01-04-2010, 10:56
Salve a tutti, avrei una piccola domanda.
Vorrei sapere se, passata una stringa al main, sia possibile ciclarla con un for lettera per lettera, senza mettere la stringa in un'altra variabile. Direttamente da *argv insomma.
Non so se sono stato chiaro :D

giampy107
01-04-2010, 11:42
Ciao,
*argv un normalissimo puntatore a carattere e quindi puoi ciclarlo sapendo la lunghezza argc con un normale ciclo for iterando carattere per carattere. Spero sia questo quello che volevi sapere. :ciauz:

R.Rufino
01-04-2010, 11:49
No, non devo ciclare *argv, ma un suo elemento :D

giampy107
01-04-2010, 12:02
Non capisco cosa significhi un suo elemento, si tratta di una stringa, un array di caratteri. Forse vuoi vedere se c' un determinato carattere o sottostringa?



for (int i = 0; i < argc; i++)
{
printf(argv[i]);
}

antotan
01-04-2010, 12:07
Originariamente inviato da R.Rufino
No, non devo ciclare *argv, ma un suo elemento :D

argv un array di stringhe. argv[i] una stringa, per 0 <= i < argc (ricorda che argv[0] il nome dell'eseguibile), per cui prendi un elemento i di argv e ciclaci come ti pare a te, ad esempio:



#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
for(int i = 1; i < argc; i++)
{
cout << "argv[" << i << "] = {";
for(char* c = argv[i]; *c != 0; c++)
{
cout << *c;
}
cout << "}" << endl;
}
}


Questo cicla su tutte le stringhe e su tutti i caratteri di ogni stringa (nota il ciclo interno)

:ciauz:

antotan
01-04-2010, 12:13
Sbagliato linguaggio:



#include <stdio.h>

int main(int argc, char** argv)
{
int i;
char* c;

for(i = 1; i < argc; i++)
{
printf("argv[%d] = {", i);
for(c = argv[i]; *c != 0; c++)
{
printf("%c", *c);
}
printf("}\n");
}
}

R.Rufino
01-04-2010, 12:17
Ecco antonan, hai capito cosa voglio fare, ma cercavo un metodo che mi permetteva di farlo senza usare una variabile (nel codice che hai postato, char *c), operando direttamente sull'elemento di *argv.
Questo volevo sapere :D

antotan
01-04-2010, 12:30
Beh, al posto di muovere il puntatore "c" del mio codice, utilizzi direttamente il puntatore "argv[i]" per non ne capisco il senso :master:



#include <stdio.h>

int main(int argc, char** argv)
{
int i;

for(i = 1; i < argc; i++)
{
printf("argv[%d] = {", i);
while(*argv[i] != 0)
{
printf("%c", *argv[i]++);
}
printf("}\n");
}
}



in questo modo argv[i] non punta pi all'inizio della stringa

R.Rufino
01-04-2010, 12:38
Carina come soluzione O:
Grazie dell'aiuto :D

MacApp
01-04-2010, 12:40
Originariamente inviato da R.Rufino
Ecco antonan, hai capito cosa voglio fare, ma cercavo un metodo che mi permetteva di farlo senza usare una variabile (nel codice che hai postato, char *c), operando direttamente sull'elemento di *argv.
Questo volevo sapere :D



#include <stdio.h>

int main(int argc, char *argv[]){
int i = 0;
for (i = 0; i < argc; ++i){
while (0 != (*argv[i])){
printf ("%c", (*argv[i]));
++argv[i];
}
printf (" ");
}
return 0;
}

Loading