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: 34 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: 39 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: 39 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:
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 |
|
|
|