You are not logged in.

  • Login

1

Wednesday, February 6th 2008, 5:06pm

Suche Algorithmus

Hallo ich habe eine Datei in der folgendes steht (alles hintereinander nur zur besseren anschauung umformatiert)

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## Xs1000;Ys1000;EA0! 
// Nr1;xP11;yP12;Tp0;AE0;BzE_1;TD0;PnE_1;NE00000000;NA00000000!
// Nr2;xP11;yP21;Tp0;AE0;BzE_2;TD0;PnE_2;NE00000000;NA00000000!
// Nr3;xP22;yP11;Tp6;AE2;Bz;TD0;PnAND;NE00000000;NA00000000!
// Nr4;xP20;yP40;Tp6;AE2;Bz;TD0;PnAND;NE00000000;NA00000000! 
// Nr5;xP11;yP41;Tp0;AE0;BzE_3;TD0;PnE_3;NE00000000;NA00000000! 
// Nr6;xP12;yP50;Tp0;AE0;BzE_4;TD0;PnE_4;NE00000000;NA00000000!
// Nr7;xP32;yP24;Tp8;AE2;Bz;TD0;PnXOR;NE00000000;NA00000000! 
// Nr8;xP46;yP29;Tp1;AE1;BzA_1;TD0;PnA_1;NE00000000;NA00000000! 
|| Nr1;AP2;vBYA6;bBXB4;PV0! ''19,52;20,50;!
|| Nr2;AP2;vBYA5;bBXA4;PV0! ''18,43;20,44;! 
|| Nr3;AP2;vBYA2;bBXB3;PV0! ''18,23;22,21;! 
|| Nr4;AP2;vBYA1;bBXA3;PV0! ''18,14;22,15;! 
|| Nr5;AP2;vBYA3;bBXA7;PV0! ''29,18;32,28;! 
|| Nr6;AP2;vBYA4;bBXB7;PV0! ''27,47;32,34;! 
|| Nr7;AP2;vBYA7;bBXA8;PV0! ''39,31;46,31;! 


zur Zeit lese ich die Zeile Segmentweise aus und gebe diese Informationen in einen Puffer dies habe ich so realisiert

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Segmentweise die Daten ausschneiden
while(Segmentausschneiden(Hauptpuffer,puffer2))
{
// Zuerst unterscheiden, um welchen Abschnitt es sich handelt
AktuellerSegmentTyp = keinen;
if (SucheString(&puffer2[0],TEXT("##"),&WertPos))
AktuellerSegmentTyp = Infodaten;
if (SucheString(&puffer2[0],TEXT("//"),&WertPos))
AktuellerSegmentTyp = Blockdaten;
if (SucheString(&puffer2[0],TEXT("||"),&WertPos))
AktuellerSegmentTyp = Verbindung;
if (SucheString(&puffer2[0],TEXT("''"),&WertPos))
AktuellerSegmentTyp = Verbindungspunkte;

switch (AktuellerSegmentTyp)
{


Nun folgenden Problem ich möchte Wissen Wie oft PnE_x und wie oft PnA_x vorkommt.
In diesen Bsp 4*PnE_x und 1xPnA_x.
(PnE_1...Pne_x sind eingänge und PnA_1....PnA_X Anzahl der Ausgänge)

Wie kann ich es schaffen das mir wie in diesen Bsp.: 4 Eingänge und 1 Ausgang vorhanden ist. (ausgegeben wird)

Hoffe ihr könnt mir helfen
Gruß Holzverleih

2

Wednesday, February 6th 2008, 6:13pm

Die Strings geeignet zerlegen und std::count_if() aus <algorithm> darüber laufen lassen?

3

Wednesday, February 6th 2008, 6:15pm

Die Strings geeignet zerlegen und std::count_if() aus <algorithm> darüber laufen lassen?


könntest du mir mal bitte ein bsp zeigen.

4

Wednesday, February 6th 2008, 7:08pm

In etwa so.

Falls du nur zählen willst kannst du natürlich den Vergleich gleich in die Schleife schreiben und dir den Vektor und das count_if spaaren ;)

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ifstream file("filename");
std::string buffer;
std::getline(file, buffer);
 
struct pne
{
  bool operator()(const std::string val) {return (val.substr(0, 3) == "PnE");}
};
 
struct pna
{
  bool operator()(const std::string val) {return (val.substr(0, 3) == "PnA");}
};
 
if (buffer[0] == '/' && buffer[1] == '/')
{
    std::string::size_type pos = buffer.find(';');
    std::vector<std::string> results;
    while (pos != std::string::npos)
   {
      results.push_back(buffer.substr(0, pos));
      buffer = buffer.substr(pos+1);
     pos = buffer.find(';');
  }
  std::size_t pnas = std::count_if(results.begin(), results.end(), pna());
  std::size_t pnes = std::count_if(results.begin(), results.end(), pne());
}


C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ifstream file("filename");
std::string buffer;
std::getline(file, buffer);
 unsigned pnes;
unsigned pnas;
 
if (buffer[0] == '/' && buffer[1] == '/')
{
    std::string::size_type pos = buffer.find(';');
    while (pos != std::string::npos)
   {
      if (buffer.substr(0, pos) == "PnE") ++pnes;
     if (buffer.substr(0, pos) == "PnA") ++pnas;
      buffer = buffer.substr(pos+1);
     pos = buffer.find(';');
  }
 
}

Similar threads

Social bookmarks