Nach c_str() hat sich die anzahl der elementen verändert.
-
Hallo!
Ich musste eine programm schreiben,die string umdreht, ohne reverse zu benutzenEingabe:BugagagUUUkk
Ausgabe:
kkUUUgagaguB
Name.size = 13
Arname size =4Wieso ist der arname size 4 und nicht 13??
int main(){
umdrehen();
system("Pause");
return 0;}[/cpp]
-
weil arname ein Pointer und kein String ist. Pointer haben auf 32-Bit Systemen die Größe 4.
Lösung: entweder arbeitest du konsequenterweise nur mit C++ Strings und mischt nicht wild und ohne zu wissen was du machst C-Strings und std::string, oder du benutzt strlen.
-
sizeof(char*)=4 (wenn 32-bit) bzw. 8 (wenn 64-bit).
Was du suchst, nennt sich std::strlen()
-
strrrlll schrieb:
sizeof(char*)=4 (wenn 32-bit) bzw. 8 (wenn 64-bit).
Was du suchst, nennt sich std::strlen()
Das ist, was er sucht, aber nicht, was er braucht.
-
Ich bin ein Mädchen=)
M... was bauche ich denn dann?
Ich wollte nur string in array char umwandeln. Das ist das einzige, was ich gefunden habe.
-
Warum willst du nicht mit dem String arbeiten? Den kannst du doch wie ein Array benutzen (String kennt den Operator [] und er macht genau das was du denkst):
#include <string> #include <iostream> #include <algorithm> using namespace std; string umdrehen(string str) { for (size_t pos = 0; pos < str.length()/2; ++pos) swap(str[pos], str[str.length()-1-pos]); return str; } int main() { cout << "Einen String eingeben:" << endl; string str; getline(cin, str); cout << "Umgedreht ist das:\n" << umdrehen(str) << '\n'; }Entschuldige die Komplettlösung, ein Hinweis kommt bei dieser Aufgabe nämlich schon der Lösung gleich. Du kannst ja mal zur Übung so versuchen, wie du es wolltest, also mit Ausgabe rückwärts (anstatt wie bei mir mit umdrehen und dann vorwärts ausgeben).
-
Wir dürfen den Standardbibliotheken,die reverse tun, nicht verwenden nicht benutzen.
swap macht ja fast reverse.oder?
-
akvarel schrieb:
swap macht ja fast reverse.oder?
Nein, swap ist nicht reverse (aberreverse benutzt swap). Rate vom Namen her doch mal, was swap macht. Und wenn du auch swap nicht benutzen darfst: Das ist ziemlich einfach selber zu machen, das lasse ich mal als Übung dir.
-
Wie lautet die Aufgabenstellung genau? Sollst du den String umdrehen oder sollst du ihn nur umgedreht ausgeben?
Letzteres wäre einfacher zu erreichen.
-
Ich werf mal
#include <string> std::string umdrehen(std::string const &s) { return std::string(s.rbegin(), s.rend()); }in die Runde.
-
Mit ranges wäre alles so viel schöner.
std::cout << str.rrange();
-
verwirr ihn nicht mit Code, den es im Standard nicht gibt. Ausserdem ist es unwahrscheinlich, dass ranges so mit cout zusammenarbeiten.
-
Das wäre aber sooooooo sexy.