Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » right-Funktion, buchstaben tauschen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.04.2007, 13:26 Uhr
~phi
Gast


Hallo,
ich habe mir eine Right Funktion gebastelt (gibt die Buchstaben zurück, von rechts aus):

Code:
  string right(string Source, int length)
  {  
    //Get the right characters by set length of a string
    string returnString;
    int lengthSource;
    lengthSource = Source.length();
    for(int i=1;i<length+1;i++) {
    return returnString;
   }



Nun ist die Ausgabe bei right("test",4) nicht "test", sondern "tset", also rückwärts. Hat jemand eine Idee wie ich das vorwärts hinbekomme? Müsste entweder die Schleife ändern, oder noch eine Schleife zum Buchstaben tauschen schreiben, das krieg ich irgendwie nicht hin.

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.04.2007, 13:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wieso nicht einfach


C++:
string right(const string &source, int length)
{
  return source.substr(source.size()-length);
}



Ansonsten:


C++:
for(int i=1;i<length+1;i++) {
    return returnString;
   }



gibt keinen Sinn (und im Moment macht der gar nix außer nen leeren string zurückzugeben)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.04.2007, 13:40 Uhr
~phi
Gast


Hi,
danke für die Antwort! Ich glaub ich schau mir mal diese Funktionen von Strings an (Source.substr).
Ich hab auch noch eine Lösung gefunden:

Code:
  string right(string Source, int length)
  {  
    //Get the right characters by set length of a string
    string returnString;
    char stringArray[Source.length()];
    int lengthSource;
    lengthSource = Source.length();
    for(int i=length;i>0;i--) {
            returnString = returnString + Source[length-i];
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.04.2007, 15:37 Uhr
xXx
Devil


Das kann so nicht gehen. Er müsste dir ne Fehlermeldung ausgeben... also normalerweise zumindest ...
also die Version von FloSoft ist doch sauber ...

und man kann auch einfach sowas hier schreiben ... auch nen ordentlicher code ...

C++:
std::string string_right(const std::string& source, const size_t length)
{
    size_t pos = source.length() - length;
    return &source.c_str()[pos];
}
Aber FloSoft hat noch eine ein wenig sauberere Lösung gemacht als ich ...

aja kannst natürlich das ganze auf nen 1-Zeiler kürzen ...

C++:
std::string string_right(const std::string& source, const size_t length)
{
    return &source.c_str()[source.length() - length];
}
aber der Sinn ist fraglich

Dieser Post wurde am 15.04.2007 um 15:39 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.04.2007, 16:41 Uhr
0xdeadbeef
Gott
(Operator)


...und da ein string in C++ im Gegensatz zu C byte-counted ist und auch Null-Zeichen enthalten kann, außerdem falsch.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.04.2007, 17:03 Uhr
xXx
Devil


Meine Funktion ist falsch? Ok ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.04.2007, 19:26 Uhr
0xdeadbeef
Gott
(Operator)


Vergleiche:

C++:
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string>

int main() {
  char const *const foo = "foo\0bar\0baz";

  std::string s(foo, foo + 12);

  for(std::string::const_iterator i = s.begin(); i != s.end(); ++i) {
    std::cout << std::hex << std::setw(2) << int(*i) << ' ';
  }
  std::cout << std::endl;

  for(char const *p = s.c_str(); *p; ++p) {
    std::cout << std::hex << std::setw(2) << int(*p) << ' ';
  }
  std::cout << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: