std::string terminieren
-
Hallo,
wenn ich versuche mit \0 einen std::string zu terminieren wird der String trotzdem vollständig ausgegeben.
std::string s = "Hallo"; s[1] = '\0'; std::cout << s;
ergibt: H llo
Was bleibt mir für eine andere Möglichkeit?
-
std::string str("hallo"); str.erase(str.begin() + 1,str.end());
-
probier es auch mal mit der c-Fkt strncpy()
char * strncpy(char * destination, const char * source, size_t n);
dürfte auch für strings funktenobwohl: eigentlich sch....
-
freshman schrieb:
probier es auch mal mit der c-Fkt strncpy()
char * strncpy(char * destination, const char * source, size_t n);
dürfte auch für strings funktenobwohl: eigentlich nicht elegant!
Gib mal nen Beispiel wie Du das anwenden willst
-
lol, std::string gibt es ja extra um nicht mit den C-Strings und Terminierung sich befassen zu müssen.
Schau dir mal std::string::substr an (in deiner lieblings C++ Referenz)
@freshman
*yuck*
-
freshman.beingAshamed(very);
//sorry, aber bitte nicht weitersagen, ja?!
-
Also...ich finde resize() hier am einfachsten, aber ich weiß ja nicht, wozu die Terminierung gut sein soll. Man kann natürlich immer schreiben:
meinStr[4] = 0; cout << meinStr.c_str() << endl;
Wenn es wirklich nur darum geht, einen String auszugeben, ohne ihn (bis auf die Terminierung) zu verändern... *schulterzuck*
-
Hier ein direkter Vergleich <cstring> gegen <string>, der die Überlegenheit von <string> unterstreicht:
#include <cstring> #include <cstdio> #include <conio.h> char str[] = "lazy"; char string[] = "The quick brown dog jumps over the lazy fox"; char fmt1[] = " 1 2 3 4 5"; char fmt2[] = "12345678901234567890123456789012345678901234567890"; int main( ) { char *pdest; int result; printf( "String to be searched:\n\t%s\n", string ); printf( "\t%s\n\t%s\n\n", fmt1, fmt2 ); pdest = strstr( string, str ); result = pdest - string + 1; if( pdest != NULL ) printf( "%s found at position %d\n\n", str, result ); else printf( "%s not found\n", str ); getch(); }
#include <string> #include <iostream> using namespace std; int main() { string substr = "lazy"; string str = "The quick brown dog jumps over the lazy fox"; string fmt1 = " 1 2 3 4 5"; string fmt2 = "12345678901234567890123456789012345678901234567890"; cout << "String to be searched:" << endl << "\t" << str << endl; cout << "\t" << fmt1 << endl << "\t" << fmt2 << endl << endl; int dest = str.find(substr); if (dest != -1) cout << "\"" << substr << "\"" << " found at position " << dest + 1 << endl; else cout << "\"" << substr << "\"" << " not found" << endl; wait(); // siehe FAQ }
-
Verwendung von std::string::substr
seh ich nicht
-
Richtig! ROFL
-
Erhard Henkes schrieb:
Hier ein direkter Vergleich <cstring> gegen <string>, der die Überlegenheit von <string> unterstreicht:
überlegenheit würde ich es nicht nennen, ich würde da ohne wertung arbeiten.
(egal, welcher algorithmus da im einzelnen gewinnt)
für mich sind das unterschiedliche sachen, ob ich in c/c++ mit der string.h arbeite, oder die string klasse aus c++ nutze.