Archiv verlassen und diese Seite im Standarddesign anzeigen : text aus string extrahieren
fabian ackle
27.07.2002, 16:16
mal ne kleine frage, gibt es es C++ auch eine funktion um einen teil eines strings zu extrahieren? also ähnlich wie substr() in php oder mid() in VB? das einzige was ich bisher gefunden hab ist string.substr() was jedoch nicht funktioniert:
left of '.substr' must have class/struct/union type
aber es muss doch auch noch etwas geben das funktioniert :)
greetz
fabian
substr ist eigentlich der richtige Weg, um einen Teilstring aus eine String (ANSI String Class!) zu extrahieren.
Folgendes sollte also das Gewünschte bewirken:
#include <iostream.h>
#include <string>
int main(int argc, char *argv[])
{
string s = "abcdefg";
string t = s.substr(2,3);
cout << t << " ist Teilstring von " << s << endl;
return 0;
}
Gruß
Chaq
fabian ackle
27.07.2002, 17:12
error C2065: 'string' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 's'
error C2065: 's' : undeclared identifier
error C2440: '=' : cannot convert from 'char [8]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
error C2146: syntax error : missing ';' before identifier 't'
error C2065: 't' : undeclared identifier
error C2228: left of '.substr' must have class/struct/union type
text.exe - 7 error(s), 0 warning(s)
ach, verwende übrigens VC++
und der der string aus dem ich einen teil extrahieren will sieht ungefähr so aus:
char string[]="asdfasdf";
also nicht string...
weisst du was ich meine? :)
greetz
fabian
Also du verwendest keine String-Klasse, sondern die Zeichenketten aus C. Anscheinend gibt es dafür keine "offizielle" substr-Funktion (zumindest kenne ich keine und hab in meinem C-Buch keine gefunden). Vermutlich muss man sich eine selber basteln . Ich habe mal folgendes probiert:
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char s[] = "abcdefg";
char t[3];
strncpy (t,&s[2],2);
t[2]=0;
puts (t);
return 0;
}
Gruß
Chaq
fabian ackle
27.07.2002, 18:45
danke, hilft mir weiter, hast mich auf eine idee gebracht :)
wenn ich
char string[]="abcdef";
habe kann ich doch mit
string[2]
zb 'c' anzeigen lassen... also eine funktion machen, for schleife rein und dann buchstabe für buchstabe auslesen und einem string hinzufügen, sollte doch eigentlich gehen :)
greetz
fabian
Bin eigentlich kein C-Coder, sondern bevorzuge C++ und arbeite deswegen eher mit der "string"-Klasse, aber ich denke das dein Ansatz auch funktionieren sollte :)
Gruß
Chaq
die c lösung wär strstr(char *, char *);
@Chaq in deinem ersten beispiel hast du vergessen dass der std string im einem namespace ist also
using std::string; dann findet er ihn auch
ich nehme in C++ grundsaetzlich fast nur strings und keine char* es ist nur eine fehlerquelle und ein aufwand
Mephisto_I
07.08.2002, 11:57
Original geschrieben von xOOn
@Chaq in deinem ersten beispiel hast du vergessen dass der std string im einem namespace ist also
using std::string; dann findet er ihn auch
Das stimmt so leider nicht, weil Chaq <string.h> und nicht <string> inkludiert. In <string.h> ist naemlich garkein Namespace "std" vorhanden.
Richtig waere daher:
#include <iostream>
#include <string>
int main()
{
using namespace std;
string s = "abcdefg";
string t = s.substr(2,3);
cout << t << " ist Teilstring von " << s << endl;
}
Dann klappt's auch mit'm Nachbarn. ;-)
ich nehme in C++ grundsaetzlich fast nur strings und keine char* es ist nur eine fehlerquelle und ein aufwand
FACK!
HTH
Mephisto_I
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.