Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Comportamento simile a shell
Forum - C/C++ - Comportamento simile a shell - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 12:35
Venerdì, 07/05/2010
Hai ragione, sono stato abbastanza vago nella mia risposta. Iostream, inutile dirlo, ti fornisce gli elementi necessari per leggere/scrivere caratteri dalla console. Il metodo std::getline(stream_di_input, stringa), per esempio, se utilizzato all'interno di un ciclo while ti permetterà di leggere ogni riga digitata dall'utente. Questa riga sarà volta per volta salvata all'interno della stringa passata come argomento, permettendoti di analizzarla volta per volta tramite la libreria String. Di questa libreria è importante il metodo find, che ti permette di trovare la posizione (indice) di un determinato carattere o insieme di caratteri all'interno della stringa data. Un esempio di codice che legge ogni riga digitata e la stampa a schermo potrebbe essere:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     std::string str;
  7.  
  8.     while(std::getline(std::cin, str) && str != "exit")
  9.     {
  10.         std::cout << str << std::endl;
  11.     }
  12.  
  13.     system("pause"); return 0;
  14. }



Se invece vuoi suddividere una stringa in comando ed argomento, come sulla console, potresti utilizzare il metodo substr():

Codice sorgente - presumibilmente Plain Text

  1. std::string stringa_completa = "print ciao!";
  2.  
  3. std::string comando = stringa_completa.substr(0, stringa_completa.find(' '));
  4. std::string argomento = stringa_completa.substr(stringa_completa.find(' ') + 1);



@HeDo: Per quanto mi riguarda programmare è un divertimento. Scoprire/riscoprire cose gia esistenti, viste, riviste e straviste è sempre e comunque una soddisfazione ed una continua esercitazione. Dubito che qualcuno possa nascere già programmatore di alto livello senza essersi mai dovuto esercitare o comunque scrivendo sempre e programmi originali. Se poi tutti ragionassero come te non ci sarebbe piu nessuna evoluzione del software. La gente smetterebbe di creare nuovi programmi, nuovi OS perchè tanto ce ne sono già tanti in giro, con i loro pregi e con i loro difetti.

Eh, si... In wikipedia "parsing" viene tradotto proprio come Analisi Sintattica. Mi dispiace farti notare che non ci sono tanti altri modi per tradurla in italiano conservandone il senso. Comunque in inglese me la cavo relativamente bene, senza dover interpellare Wikipedia per ogni termine banale.

Per quanto mi riguarda questa è già la seconda volta che mi rispondi in maniera arrogante e sgarbata, e come vedo da altri tuoi post non sono nemmeno l'unico utente ad essere trattato in questo modo. Posso capire che tu sia stufo di dover affrontare "tutti questi noobs" giorno dopo giorno, essendo moderatore... Ma a questo punto, piuttosto che rispondere male, risparmiati pure la fatica di scrivere! E ricorda che non è certo il numero di posts o la data d'iscrizione ad un forum a rappresentare l'abilità di una persona. Con questo non voglio assolutamente insinuare di essere più bravo di te, anzi. Sono noob. Ho iniziato a programmare solo da qualche mese, ma se posso comunque dare una mano ad altri utenti lo faccio volentieri, senza sbattergli in faccia la loro noobaggine ad ogni post che scrivono.

Scusate l'OT.

EDIT: Editato il primo esempio, in quanto era un loop infinito XD

Ultima modifica effettuata da napco il 07/05/2010 alle 12:40
PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 15:13
Venerdì, 07/05/2010
Grz per le risposte comunque sapevo cos'è un parser non in modo approfondito ma sapevo a cosa servisse solo non pensavo che servisse anche per fare una cosa cosi "" semplice"" cmq ora proverò con la soluzione proposta da @napco

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 20:07
Venerdì, 07/05/2010
Testo quotato

Postato originariamente da napco:

Hai ragione, sono stato abbastanza vago nella mia risposta. Iostream, inutile dirlo, ti fornisce gli elementi necessari per leggere/scrivere caratteri dalla console. Il metodo std::getline(stream_di_input, stringa), per esempio, se utilizzato all'interno di un ciclo while ti permetterà di leggere ogni riga digitata dall'utente. Questa riga sarà volta per volta salvata all'interno della stringa passata come argomento, permettendoti di analizzarla volta per volta tramite la libreria String. Di questa libreria è importante il metodo find, che ti permette di trovare la posizione (indice) di un determinato carattere o insieme di caratteri all'interno della stringa data. Un esempio di codice che legge ogni riga digitata e la stampa a schermo potrebbe essere:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     std::string str;
  7.  
  8.     while(std::getline(std::cin, str) && str != "exit")
  9.     {
  10.         std::cout << str << std::endl;
  11.     }
  12.  
  13.     system("pause"); return 0;
  14. }



Se invece vuoi suddividere una stringa in comando ed argomento, come sulla console, potresti utilizzare il metodo substr():

Codice sorgente - presumibilmente Plain Text

  1. std::string stringa_completa = "print ciao!";
  2.  
  3. std::string comando = stringa_completa.substr(0, stringa_completa.find(' '));
  4. std::string argomento = stringa_completa.substr(stringa_completa.find(' ') + 1);






ottima risposta.

Testo quotato

Postato originariamente da napco:

@HeDo: Per quanto mi riguarda programmare è un divertimento. Scoprire/riscoprire cose gia esistenti, viste, riviste e straviste è sempre e comunque una soddisfazione ed una continua esercitazione. Dubito che qualcuno possa nascere già programmatore di alto livello senza essersi mai dovuto esercitare o comunque scrivendo sempre e programmi originali. Se poi tutti ragionassero come te non ci sarebbe piu nessuna evoluzione del software. La gente smetterebbe di creare nuovi programmi, nuovi OS perchè tanto ce ne sono
già tanti in giro, con i loro pregi e con i loro difetti.




per me programmare è sia un divertimento che un lavoro. Se possiamo intenderli come due punti di vista separati, nel primo è giusto sperimentare e reinventare la ruota a scopo didattico e di ricerca, nel secondo è una cosa assolutamente da evitare.
Ma da qui a dire che se tutti facessero come dico io il software non si evolverebbe ce ne passa. Se tutti facessero come dico io in giro ci sarebbe decisamente meno codice spazzatura e più riutilizzazione di librerie collaudate ed ottimizzate.

Testo quotato

Postato originariamente da napco:

Eh, si... In wikipedia "parsing" viene tradotto proprio come Analisi Sintattica. Mi dispiace farti notare che non ci sono tanti altri modi per tradurla in italiano conservandone il senso. Comunque in inglese me la cavo relativamente bene, senza dover interpellare Wikipedia per ogni termine banale.




sorry per l'insinuazione, sono stato deliberatamente tendenzioso :yup:

Testo quotato

Postato originariamente da napco:

Per quanto mi riguarda questa è già la seconda volta che mi rispondi in maniera arrogante e sgarbata, e come vedo da altri tuoi post non sono nemmeno l'unico utente ad essere trattato in questo modo. Posso capire che tu sia stufo di dover affrontare "tutti questi noobs" giorno dopo giorno, essendo moderatore... Ma a questo punto, piuttosto che rispondere male, risparmiati pure la fatica di scrivere! E ricorda che non è certo il numero di posts o la data d'iscrizione ad un forum a rappresentare l'abilità di una persona. Con questo non voglio assolutamente insinuare di essere più bravo di te, anzi. Sono noob. Ho iniziato a programmare solo da qualche mese, ma se posso comunque dare una mano ad altri utenti lo faccio volentieri, senza sbattergli in faccia la loro noobaggine ad ogni post che scrivono.



mi dispiace di esser sembrato sgarbato ed arrogante, non era mia intenzione, semplicemente quando si pongono certe domande così generiche che basterebbe pensarci due nanosecondi per buttare giù due righe di codice mi indispongo, è più forte di me. Come hai ben detto basta cercare su google, tutto è già stato fatto e tutto è già stato risolto (almeno a questo livello) quindi una buona skill nella ricerca è indispensabile per il programmatore di oggi ;)

ma è proprio la semplicità con cui le informazioni sono rintracciabili che mi fa riflettere sulle persone che pongono domande di questo genere...

PM Quote
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 1:41
Sabato, 08/05/2010
Va benissimo, nessun problema! :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo