JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=00a79e3c466f410a71f036a5e8b67da3Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

String in reverse

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Database
Mini JLI'ler



Anmeldedatum: 20.11.2004
Beiträge: 24
Wohnort: Hinter den sieben Bergen
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 22:44    Titel: String in reverse Antworten mit Zitat

Hey,
ich brauche mal wieder ine bisschen Hilfe. Ich moechte ein Programm schreiben, dass einen String umgekehrt wieder ausgibt.

Also so zum Beispiel:

input: hallo
output: ollah

I hatte mit gedacht eine for(...) Schleife zu schreiben, die die einzelnen Teile des Strings an die neue Stelle packt.

Ich moechte einen normalen String mit

Code:

char* string[];


Ich habe allerdings keine Ahnung wie eine solche Schleife aussehen soll. Ich habe mir nun schon seit Tagen den Kopf zerbrochen und im Netz auch nichts richtiges gefunden. Ich möchte auf jeden Fall character arrays verwenden, habe aber keine Ahnung wie?

Ich kann es auf diese Art machen:

Code:

char str[] = "Hello";
  string comone(str);
  reverse( comone.begin(), comone.end() );

  cout << comone << "\n";


Ich möchte allerdings die Version mit den Character arrays ausprobieren.
Vielen Dank für die Hilfe schon mal im Voraus!!

Danke,
Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 23:35    Titel: Antworten mit Zitat

habs mal so spontan ausm kopf gemacht:

CPP:
for(int i=0; i<sizeof(mein_string); ++i)
{
     mein_string[i] = mein_string[sizeof(mein_string) - i];
}


ist nur ein Ansatz, der string muss z.B. formatiert sein und außerdem müsstest du noch auf das NUL-Zeichen \0 achten. Das kannst du ja vorher berechnen.

Ach ja, das würde nur gehen, weil char jeweils nur ein Byte besetzt

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Database
Mini JLI'ler



Anmeldedatum: 20.11.2004
Beiträge: 24
Wohnort: Hinter den sieben Bergen
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 23:42    Titel: hab ne lösung Antworten mit Zitat

Hallo,
ich habe mich mal an die Arbeit gemacht und hab versucht einen normalen String mit "Hello" umzudrehen:

Code:

#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{

   /*
cout << argc << '\n';

    for(int i=0;i<argc;i++)
    {
        cout << argv[i] << '\n';
    }

*/
   
   /*
   
   char str[] = "Hello";
  string comone(str);
  reverse( comone.begin(), comone.end() );

  cout << comone << "\n";

  cout << "---------------------\n";
 
  if ( argv[1] == NULL )
     cout << "error";
  else
     cout << argv[1];

*/

   char string[] = "Hello";
   cout << string;
   int per = strlen(string);
   cout << per;

   for (int i=0;i<=per;i++)
   {
      for (int pe=per;pe>=0;pe--)
      {
         string[per] = string[pe];
      }
   }

   cout << string;



  return 0;
}


Nun, ich kriege den normalen String, die Länge des Strings. Danach bekomme ich eine ART vom umgedrehten String und danach komische Zeichen. Ich bin auf dem richtigen Weg, irgendwo ist aber der Bug drin. Ich hoffe ihr könnt mir helfen!!!
Ich würde es aber schon gerne auf diese Art machen!

Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 23:53    Titel: Antworten mit Zitat

na gut, ich machs mal schnell mit deinem code:
CPP:
int len = strlen(str);
char tempStr[] = str;

for(int i=0; i<len; ++i)
     str[i] = tempStr[len - i];
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Database
Mini JLI'ler



Anmeldedatum: 20.11.2004
Beiträge: 24
Wohnort: Hinter den sieben Bergen
Medaillen: Keine

BeitragVerfasst am: 19.02.2006, 02:14    Titel: Fehler: Antworten mit Zitat

Nun ja,
wenn ich den Code also wie folgt änder:

Code:

char str[] = "Hello";
   
   int len = strlen(str);
    char tempStr[] = str;

for(int i=0; i<len; ++i)
     str[i] = tempStr[len - i];

  return 0;


Dann kriege ich folgende Fehler:
Zitat:

warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data

error C2440: 'initializing' : cannot convert from 'char [6]' to 'char []'


Wie kann ich dies beheben?

Danke im Voraus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 19.02.2006, 10:13    Titel: Re: Fehler: Antworten mit Zitat

so:
CPP:
char str[] = "Hello";
   
size_t len = strlen(str);
char tempStr[len+1];

strcpy(tempStr, str);

for(int i=0; i<len; ++i)
     str[i] = tempStr[len - i];

  return 0;


size_t ist in STDDEF.h definiert. Wenn du die net (intern) inkludiert hast, hast du auch den typ net. Dann nimmst du einfach:
CPP:
unsigned long len = static_cast<unsigned long>(strlen(str));


Gruß DirectXer

EDIT: fehler behoben


Zuletzt bearbeitet von DirectXer am 19.02.2006, 11:04, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 19.02.2006, 10:57    Titel: Antworten mit Zitat

Code:

char str[] = "Hello";
   
size_t len = strlen(str);
char tempStr[len];

strcpy(tempStr, str);

for(int i=0; i<len; ++i)
     str[i] = tempStr[len - i];

  return 0;


"Hello" ist 6 Zeichen lang, strlen gibt aber nur 5 zurück, du kopierst mit strcpy aber 6 zeichen auf den 5er string. Sowas sollte man nicht machen, du überschreibst damit andere Dinge.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 19.02.2006, 11:03    Titel: Antworten mit Zitat

stimmt, einhach len+1 habs ma editiert

sry
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Database
Mini JLI'ler



Anmeldedatum: 20.11.2004
Beiträge: 24
Wohnort: Hinter den sieben Bergen
Medaillen: Keine

BeitragVerfasst am: 20.02.2006, 01:44    Titel: Antworten mit Zitat

Warum kompliziert, wenns auch einfach geht.

CODE:
int ReverseString(char *str)
{
int x = strlen(str); //takes length of string
for(int y = x; y >= (x/2)+1; y--) //for loop arranging the string
{
swap(str[x-y],str[y-1]); // swaps letters
}
return 0; //return
}

CODE END
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 20.02.2006, 08:25    Titel: Antworten mit Zitat

Hi!

Zitat:

Warum kompliziert, wenns auch einfach geht.


DirectXer's Version ist da aber bedeutend unkomplizierter und mit weniger Rechenaufwand verbunden. Rolling Eyes

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Database
Mini JLI'ler



Anmeldedatum: 20.11.2004
Beiträge: 24
Wohnort: Hinter den sieben Bergen
Medaillen: Keine

BeitragVerfasst am: 21.02.2006, 20:49    Titel: Antworten mit Zitat

Kommt auf das Auge des Betrachters an! Wink

Sein code ist gut, keine Frage, ich mag meinen eigenen aber besser.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 21.02.2006, 21:25    Titel: Antworten mit Zitat

Hi!

Du kannst ihn ja gern "besser mögen". Aber es ging mir darum das du ihn als weniger kompliziert vorgestellt hast. Und dass, das dürfte sogar dir klar sein, ist nicht der Fall!

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.02.2006, 22:27    Titel: Antworten mit Zitat

Soetwas gibt es bei mir zum Frühstück:
CPP:
namespace ttl
{
    // Längenfunktion
template<typename T> inline const unsigned long length (const T *data)
{
    for (unsigned long i=0; ; ++i)
        if (*(data+i) == 0)
            return (i);
}

    // Vertauschungsfunktion
template<typename T> inline void swap (T* left, T* right)
{
    const T temp = (*left);
    (*left)  = (*right);
    (*right) = temp;
}

    // Umkehrungfunktion
template<typename T> inline void reverse (T left, T right)
{
    for (; (left != right) && (left != --right); ++left)
        ttl::swap (left, right);
}
} // Namespace: ttl

int main (void)
{
    wchar_t str[] = L"Hello";

    ttl::reverse (str, str+ttl::length(str));

    std::wcout << str << std::endl;

    return 0;
}
Und wie immer: Unicode und Ansisupport möglich.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum