| 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
 
 
 | 
			
				|  Verfasst am: 18.02.2006, 22:44    Titel: String in reverse |   |  
				| 
 |  
				| 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
 
 
 
 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,
 
  |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 18.02.2006, 23:35    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Database Mini JLI'ler
 
 
 
 Anmeldedatum: 20.11.2004
 Beiträge: 24
 Wohnort: Hinter den sieben Bergen
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 18.02.2006, 23:42    Titel: hab ne lösung |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 18.02.2006, 23:53    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Database Mini JLI'ler
 
 
 
 Anmeldedatum: 20.11.2004
 Beiträge: 24
 Wohnort: Hinter den sieben Bergen
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 19.02.2006, 02:14    Titel: Fehler: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 19.02.2006, 10:13    Titel: Re: Fehler: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| abc_d JLI Master Trainee
 
  
 Alter: 35
 Anmeldedatum: 27.01.2003
 Beiträge: 615
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 19.02.2006, 10:57    Titel: |   |  
				| 
 |  
				|  	  | 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 |  | 
	
		|  | 
	
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 19.02.2006, 11:03    Titel: |   |  
				| 
 |  
				| stimmt, einhach len+1 habs ma editiert 
 sry
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Database Mini JLI'ler
 
 
 
 Anmeldedatum: 20.11.2004
 Beiträge: 24
 Wohnort: Hinter den sieben Bergen
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.02.2006, 01:44    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| David Super JLI'ler
 
 
 Alter: 40
 Anmeldedatum: 13.10.2005
 Beiträge: 315
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.02.2006, 08:25    Titel: |   |  
				| 
 |  
				| Hi! 
 
  	  | Zitat: |  	  | Warum kompliziert, wenns auch einfach geht.
 
 | 
 
 DirectXer's Version ist da aber bedeutend unkomplizierter und mit weniger Rechenaufwand verbunden.
   
 grüße
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Database Mini JLI'ler
 
 
 
 Anmeldedatum: 20.11.2004
 Beiträge: 24
 Wohnort: Hinter den sieben Bergen
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.02.2006, 20:49    Titel: |   |  
				| 
 |  
				| Kommt auf das Auge des Betrachters an!   
 Sein code ist gut, keine Frage, ich mag meinen eigenen aber besser.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| David Super JLI'ler
 
 
 Alter: 40
 Anmeldedatum: 13.10.2005
 Beiträge: 315
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.02.2006, 21:25    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Patrick Dark JLI Master
 
  
 
 Anmeldedatum: 25.10.2004
 Beiträge: 1895
 Wohnort: Düren
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.02.2006, 22:27    Titel: |   |  
				| 
 |  
				| Soetwas gibt es bei mir zum Frühstück: 
 Und wie immer: Unicode und Ansisupport möglich. 	  | 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;
 }
 | 
 _________________
 '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 |  | 
	
		|  | 
	
		|  |