2009-08-01 4 views
0

Je construis un interpréteur simple d'un langage que je développe, mais comment je peux faire un cout de quelque chose qui est après un mot et arrondi par "", comme cela:Lire quelque chose après un mot en C++

#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; 
} 

Et comment je peux supprimer le "" lors de l'impression du texte. Voici l'exemple du fichier:

print "Bonjour Monde"

Lire mon post au milieu des réponses!

Merci

+0

Je suis de retour ici à StackOverflow! –

Répondre

1

Je suppose que ce que vous voulez est d'identifier les chaînes entre guillemets dans le fichier, et les imprimer sans les guillemets. Si oui, l'extrait ci-dessous devrait faire l'affaire.

Cela va dans votre boucle while(!file.eof()):

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); 
    }  
} 
+0

Merci nagul, tu m'as beaucoup aidé! –

0

Je ne comprends pas votre problème. En entrée de

print "Hello, World" 

votre test de linha == "print" ne sera jamais vraie (comme Linha contient le reste de la ligne de sorte que le equalitry est jamais vrai).

Recherchez-vous de l'aide pour le traitement de chaînes, c'est-à-dire la division de la ligne d'entrée? Ou cherchez-vous une aide à l'expression régulière? Il existe des bibliothèques que vous pouvez utiliser pour ce dernier.

+0

Je construis mon propre interprète, le je veux faire ceci: Montrer seulement le contenu qui est dans le "" sur linha, parce que c'est mon langage que je développe. Merci! –

2

J'espère que cet exemple simple serait utile.

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); 

Ce code trouve la première occurnce de ". trouve ensuite l'occurrence suivante de celui-ci après le premier. Enfin, il extrait la chaîne souhaitée entre "" et l'imprime.

+0

N'a pas testé, mais c'est clairement une façon simple d'aller qui fonctionne. –

Questions connexes