2015-05-20 4 views
-4

Я редактирую свой пост с прогрессом, который я сделал до сих пор. Ну, что я хочу сделать сейчас это:Поиск слов в файле с языком C++

  1. Прочитать текстовый файл с первой строки без asterics (*), он же линии, начиная с номера 1, до конца файла
  2. Когда «пустое место» вместо «> sa0» (6-й столбец) помещает @ в переменную. И добавьте следующую строку в следующую переменную (aka fsa1)
  3. Распечатайте это пользователю по строкам.

код у меня до сих пор:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    string line, netlist; 
    int address, fout, fin; 
    string name, type, fsa0, fsa1; 

    cout << "Wich Netlist you want to use?" << endl; 
    cin >> netlist; 

    ifstream file(netlist.c_str()); 

     if (file.is_open()) 
     { 
      do{ 

       getline(file, line); 

      } while (line[0] == '*'); 


       file >> address >> name >> type >> fout >> fin >> fsa0; 
       if (fsa0 != ">sa0") { fsa1 = fsa0; fsa0 = "@"; } else { file >> fsa1; } 
       cout << address << " " << name << " " << type << " " << fout << " " << fin << " " << fsa0 << " " << fsa1 << endl; 



     } else { cout << "File not found" << endl; } 

      file.close(); 

    return 0; 
} 

проблемы Найдено:

  1. Не показывая первую строку после последней строки с astherisc.
  2. Не показывать все линии только второй.

Текстовый файл им пытаются читать:

*c17 iscas example (to test conversion program only) 
*--------------------------------------------------- 
* 
* 
* total number of lines in the netlist .............. 17 
* simplistically reduced equivalent fault set size =  22 
*  lines from primary input gates .......  5 
*  lines from primary output gates .......  2 
*  lines from interior gate outputs ......  4 
*  lines from **  3 ** fanout stems ...  6 
* 
*  avg_fanin = 2.00,  max_fanin = 2 
*  avg_fanout = 2.00,  max_fanout = 2 
* 
* 
* 
* 
* 
    1  1gat inpt 1 0  >sa1 
    2  2gat inpt 1 0  >sa1 
    3  3gat inpt 2 0 >sa0 >sa1 
    8  8fan from  3gat  >sa1 
    9  9fan from  3gat  >sa1 
    6  6gat inpt 1 0  >sa1 
    7  7gat inpt 1 0  >sa1 
    10 10gat nand 1 2  >sa1 
    1  8 
    11 11gat nand 2 2 >sa0 >sa1 
    9  6 
    14 14fan from 11gat  >sa1 
    15 15fan from 11gat  >sa1 
    16 16gat nand 2 2 >sa0 >sa1 
    2 14 
    20 20fan from 16gat  >sa1 
    21 21fan from 16gat  >sa1 
    19 19gat nand 1 2  >sa1 
    15  7 
    22 22gat nand 0 2 >sa0 >sa1 
    10 20 
    23 23gat nand 0 2 >sa0 >sa1 
    21 19 

И еще одна вещь, вы, ребята, дайте мне несколько советов о том, что делать с этими линиями только с двумя целыми числами, как последний?

Спасибо всем. Я ценю всю помощь.

+0

'||' не работает так, как вы думаете, поэтому 'string gatesearch =" и "|| "или" || "nand" || "или" || «не» || «xor»; 'и' if (netlist == c17 || c432 || c499 || c880 || c1355 || c1908 || c2670 || c3540 || c5315 || c6288 || c75582) 'неверны. – drescherjm

+0

*** string INPUT []; // Я не уверен, размер *** Используйте вектор или, возможно, список. – drescherjm

+0

*** string gatesearch = "and" || "или" || "nand" || "или" || «не» || «xor»; *** Вместо этого я использовал бы перечисление, если строки для этого. – drescherjm

ответ

0

По крайней мере, ИМО, вы приближаетесь к этому неправильно. Я бы начал с чтения строки ввода. Затем проверьте, сколько предметов на этой линии. Затем проанализируйте элементы в строке соответствующим образом.

Если вы не настроены на выполнение этого в чистом C++ самостоятельно, что-то вроде AWK или yacc сделает работу намного проще.

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

+0

Я попробую это. Спасибо. –

Смежные вопросы