Zeichnenkette umdrehen in C++

Knubbelmac

Bismarckapfel
Registriert
05.06.06
Beiträge
141
Hallo,

ich bräuchte Hilfe bei einem C++ Programm. Es gibt 2 Funktionen:

1. auswerten
2. match

Dabei wird in match ein regulärer Ausdruck realisiert, z. B. ^a*.5$. Die Zeichnenkette sollen während der Auswertung umgedreht werden, so daß bei einer Eingabe von

abcd5

der Vektor

5dcba

enthalten soll. Meine Schwierigkeit liegt dabei, daß ich die Zeichnenketten nicht umdrehen kann. Das sollte ja eigentlich über einen Zeiger möglich sein, der einfach von hinten nach vorne liest. Nur, wie realisier ich das? Das Problem liegt in der Funktion auswerten.

Anbei noch ein Codefragment:

Code:
#include <string>
#include <vector>
#include <cstddef>
#include <cctype>

using namespace std;

int auswerten(char const **argv, vector<string>& v)
{
    if(!argv)  
    return -1;

    string temp("");
    for(;*argv;++argv)
     { 
       temp=match(*argv);
       for(size_t d(0);d<temp.length();++d)
          { 
            // Hier steh ich auf dem Schlauch

          }
       v.push_back(temp);  
      }
  return 0;
}

string match(char const *p)

// Hier wird der reguläre Ausdruck realisiert
// ...
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Code:
string temp = match(*argv);
size_t e    = temp.length();
char c;

for(size_t d = 0; d < temp.length() / 2; ++d)
{
    --e;
    c = temp[d];
    temp[d] = temp[e];
    temp[e] = c;
}
MacApple
 

Knubbelmac

Bismarckapfel
Registriert
05.06.06
Beiträge
141
MacApple, Du hast mir sehr geholfen! Vielen lieben Dank!!!
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
Hallo,
ich bräuchte Hilfe bei einem C++ Programm. Es gibt 2 Funktionen:
Ich würde das ja anders machen, und C++ programmieren statt C.
Code:
#include <string>
#include <vector>
#include <cstddef>
#include <cctype>
#include <stdexcept>

using namespace std;

void auswerten(char const **argv, vector<string>& v)
{
    if(!argv) throw std::runtime_error("argv is null");

    for(;*argv;++argv) { 
        std::string temp (match(*argv));
        std::string reverse(temp.rbegin(), temp.rend());
        v.push_back(reverse);  
    }
}
 

Mitglied 7974

Gast
Nennt mich skriptsprachenverwöhnt, aber ich hätte das Stringumdrehen so gemacht (weil ich das besser lesen kann):

Code:
string original = ...;
string lanigiro = "";
int i;
for (i = original.size() - 1; i >= 0; i--) {
  lanigiro += original.at(i);
}
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
hab dazu mal eine delphi anwendung geschrieben und kann den QT nachher mal reinstellen.
Mit C++ hab ich noch nicht die erfahrung..
 

wastel

Grahams Jubiläumsapfel
Registriert
14.02.07
Beiträge
107
geht denke ich noch einfacher mit einem rekursiven aufruf.
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
unit UProjekt;

{

Thorsten Adami, Aufgabe Test- 15.01.07

}

interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;



type

TfrmTest = class(TForm)

edtEingabe: TEdit;

lblAusgabe: TLabel;

btnStart: TButton;

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure btnStartClick(Sender: TObject);

private

{ Private-Deklarationen }

public

{ Public-Deklarationen }

end;



var

frmTest: TfrmTest;



implementation



{$R *.dfm}



//------------------------------------------------------------------------------



procedure check(eingabe,ausgabe:string);

var char1,char2 : PChar; //Variablen f¸r strcomp

i, k : Integer; //Laufzeitvariable und f¸r strcomp

begin

eingabe := LowerCase(eingabe);

ausgabe := LowerCase(ausgabe);

while Pos(' ',ausgabe) <> 0 do

begin

delete(eingabe,Pos(' ',eingabe),1);

delete(ausgabe,Pos(' ',ausgabe),1);

end;{while}



char1 := PChar(eingabe);

char2 := PChar(ausgabe);



k := strcomp(char1,char2);

if k = 0 then ShowMessage('Sie haben ein Palindrom eingegeben');





end;{check}



//------------------------------------------------------------------------------



function wandel(eingabe:string):string;

var i : Integer; //Laufzeitvariable

h : String; //hilfsvariable beim String

begin

for i := 0 to length(eingabe)-1 do

begin

h := copy(eingabe,length(eingabe)-i,1);

Insert(h,result,i+1);



end;{for}

check(eingabe,result);

end;{wandel}





//------------------------------------------------------------------------------



procedure TfrmTest.FormCreate(Sender: TObject);

begin

edtEingabe.Clear;

btnStart.Caption := 'Start';

lblAusgabe.Font.Size := 15;

lblAusgabe.Font.Style := [fsbold];



end;{FormCreate}



//------------------------------------------------------------------------------



procedure TfrmTest.btnStartClick(Sender: TObject);

begin

lblAusgabe.Caption := Wandel(edtEingabe.Text);

end;//btnStartClick



//------------------------------------------------------------------------------



end.{Programm}

so war mein delphi programm :)