Прочитайте что-нибудь после слова в C ++ - PullRequest
0 голосов
/ 01 августа 2009

Я создаю простой интерпретатор языка, который я разрабатываю, но как я могу сделать cout чего-то, что находится после слова и округлено до "", например так:

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

И как мне убрать "" при печати текста. Вот пример файла:

печать "Hello, World"

Прочтите мой пост в середине ответов!

Спасибо

Ответы [ 3 ]

2 голосов
/ 01 августа 2009

Надеюсь, этот простой пример поможет.

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

Этот код находит первое вхождение ". Затем находит следующее вхождение этого после первого. Наконец, он извлекает желаемую строку между "" и печатает ее.

1 голос
/ 01 августа 2009

Я предполагаю, что вы хотите идентифицировать строки в кавычках в файле и печатать их без кавычек. Если так, то приведенный ниже фрагмент должен помочь.

Это входит в ваш 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 голосов
/ 01 августа 2009

Я не понимаю твою проблему. На входе

print "Hello, World"

ваш тест linha == "print" никогда не будет верным (поскольку linha содержит остаток строки, поэтому равенство никогда не бывает верным).

Вам нужна помощь по обработке строк, т. Е. Разбиению строки ввода?

Или вы ищете помощь по регулярным выражениям? Есть библиотеки, которые вы можете использовать для последнего.

...