Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37

    [C]Operare su argomento del main

    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

  2. #2
    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.
    Il blog sullo sviluppo software, lezioni online gratuite su VC/C++, VB.NET, C#, PHP, Windows e Linux.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37
    No, non devo ciclare *argv, ma un suo elemento

  4. #4
    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?

    codice:
    for (int i = 0; i < argc; i++)
    {
       printf(argv[i]);
    }
    Il blog sullo sviluppo software, lezioni online gratuite su VC/C++, VB.NET, C#, PHP, Windows e Linux.

  5. #5
    Originariamente inviato da R.Rufino
    No, non devo ciclare *argv, ma un suo elemento
    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:

    codice:
    #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)


  6. #6
    Sbagliato linguaggio:

    codice:
    #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");
    	}
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37
    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

  8. #8
    Beh, al posto di muovere il puntatore "c" del mio codice, utilizzi direttamente il puntatore "argv[i]" però non ne capisco il senso :master:

    codice:
    #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

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37
    Carina come soluzione O:
    Grazie dell'aiuto

  10. #10
    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
    codice:
    #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;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.