Leggi qualcosa dopo una parola in C ++
-
06-07-2019 - |
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
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.