Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]1105[/thread]

Funktion, die eine Zeichenkette "umdreht"



<< >> 8 Einträge, 1 Seite
renee
 2004-04-05 14:57
#10924 #10924
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich soll eine Funktion schreiben, die eine Zeichenkette invertiert, d.h. umdreht. Aus Hugo wird dann oguH. Das ganze soll mit Zeigern gelöst werden.
Der Name der Funktion ist vorgegeben: const char* cReverse(const char *text)

Wir sollen keine Bibliotheksfunktionen verwenden.

Ich habe bisher folgenden Code:
Code: (dl )
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
28
29
30
31
32
#include <iostream>

using namespace std;

int cstrlen(const char *text){
int laenge = 0;
while(*text++){
laenge++;
}
return laenge;
}

const char* cReverse(const char *text){
const char *tmpString;
int stringLaenge = cstrlen(text);
stringLaenge--;
int j = 0;
for(int i = stringLaenge; i >= 0; i--){
tmpString[j] = text[i];
j++;
}
return tmpString;
}

int main(){
const char *string = "Hugo ist blau";
int lang = cstrlen(string);
const char *test = cReverse(string);
cout<<"Der String ist "<<lang<<" Zeichen lang.\n";
cout<<test[0];
return 1;
}


Aber irgendwie funktioniert das noch nicht...
Ich habe auch schon zu lange kein C++ mehr programmiert, so dass ich da wirklich nicht mehr weiterkomme...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-04-05 15:07
#10925 #10925
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
häng an den erzeugten String noch die Null an! ('\0')

Außerdem ist Dein erzeugter String nur ein Zeiger ins nichts! Hol Dir erst soviel Speicher, wie der Originalstring belegt!

Überleg Dir, ob Deine Lämngenfunktion die Länge mit schließender Null oder ohne zurückgeben soll und berücksichtige dies entsprechend. (Ein Kommentar dazu wär auch nicht verkehrt)



Wahhh ich brauch unbedingt mal wieder ein C++-Projekt, ich hab schon soviel aus dem ganz aktuellen Gedächtnis verloren :-(\n\n

<!--EDIT|Crian|1081163513-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-04-05 15:31
#10926 #10926
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Danke, jetzt funktioniert's. Ich sollte auch mal wieder was mit C++ machen habe ich gestern festgestellt.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-04-05 15:54
#10927 #10927
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Und wie sieht der Ausschnitt jetzt funktionierend aus?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-04-05 15:58
#10928 #10928
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
funktionieren, ja, jedoch wohl nicht nach der aufgabenstellung...

Code: (dl )
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
namespace sk
{
  int strlen(char* text)
  {
     int len = 0;
     while(*text++) len++;
     return len;
  }

  void swap(char & a, char & b)
  {
     char tmp = a;
     a = b;
     b = tmp;
  }

  const char* reverse(const char* text)
  {
     int len = sk::strlen(text)+1;
     for(int i = 0; i < len/2; i++)
     {
        sk::swap(text[i], text[len-i-1]);
     }
     return text;
  }
}
\n\n

<!--EDIT|esskar|1081166561-->
renee
 2004-04-05 16:10
#10929 #10929
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ok, ich übernehme esskars Lösung...

@crian: ich hatte aufgrund Deines Hinweises einfach ein tmpString = new char[stringLaenge + 1];
gemacht und danach noch ein '\0' angehängt. Das war alles...\n\n

<!--EDIT|renee|1081167133-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-04-05 17:59
#10930 #10930
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
ah :D

Und wo ist jetzt genau das "mit Zeigern"? Naja, in C sind eigentlich immer überall Zeiger ;)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-04-05 19:31
#10931 #10931
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,05.04.2004, 15:59]Und wo ist jetzt genau das "mit Zeigern"? Naja, in C sind eigentlich immer überall Zeiger ;)[/quote]
okay...
aber ich hab diese aufgabenstellung von früher noch in erinnerung...
war glaub ich so gemeint!

btw. war noch ein fehler:
Code: (dl )
1
2
3
4
5
6
7
8
9
const char* reverse(char* text)
{
int len = sk::strlen(text);
for(int i = 0; i < len/2; i++)
{
sk::swap(text[i], text[len-i-1]);
}
return text;
}
<< >> 8 Einträge, 1 Seite



View all threads created 2004-04-05 14:57.