Domanda

Sto costruendo un semplice interprete di un linguaggio che sto sviluppando, ma come posso fare un cout di qualcosa che è dopo una parola e arrotondato da " " ;, come in questo modo:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main( int argc, char* argv[] )
{

 if(argc != 2)
 {
    cout << "Error syntax is incorrect!\nSyntax: " << argv[ 0 ] << " <file>\n";
   return 0;
 }
 ifstream file(argv[ 1 ]);
 if (!file.good()) {
    cout << "File " << argv[1] << " does not exist.\n";
   return 0;
 }
 string linha;
 while(!file.eof())
 {
 getline(file, linha);
 if(linha == "print")
   {
   cout << text after print;
   }
 }
  return 0;
}

E come posso rimuovere " " quando si stampa il testo. Ecco l'esempio di file:

  

stampa " Ciao, mondo "

Leggi il mio post nel mezzo delle risposte!

Grazie

È stato utile?

Soluzione

Suppongo che ciò che desideri sia identificare le stringhe tra virgolette nel file e stamparle senza virgolette. In tal caso, il frammento di seguito dovrebbe fare il trucco.

Questo vale nel tuo mentre (! file.eof ()) loop:

string linha;
while(!file.eof())
{
    getline(file, linha);
    string::size_type idx = linha.find("\""); //find the first quote on the line
    while ( idx != string::npos ) {
        string::size_type idx_end = linha.find("\"",idx+1); //end of quote
        string quotes;
        quotes.assign(linha,idx,idx_end-idx+1);

        // do not print the start and end " strings
        cout << "quotes:" << quotes.substr(1,quotes.length()-2) << endl;

        //check for another quote on the same line
        idx = linha.find("\"",idx_end+1); 
    }       
}

Altri suggerimenti

Spero che questo semplice esempio possa aiutare.

std::string code = " print \" hi \" ";
std::string::size_type beg = code.find("\"");
std::string::size_type end = code.find("\"", beg+1);

// end-beg-1 = the length of the string between ""
std::cout << code.substr(beg+1, end-beg-1);

Questo codice trova la prima occorrenza di " ;. Quindi trova la successiva occorrenza di dopo la prima. Infine, estrae la stringa desiderata tra " " e la stampa.

Non capisco il tuo problema. Su input di

print "Hello, World"

il tuo test di linha == " print " non sarà mai vero (poiché linha contiene il resto della linea, quindi l'equivalenza non è mai vera).

Stai cercando aiuto sull'elaborazione delle stringhe, ovvero la divisione della linea di input?

O stai cercando un aiuto per le espressioni regolari? Ci sono librerie che puoi usare per quest'ultima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top