PDA

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


Chaq
27.07.2002, 16:42
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

Chaq
27.07.2002, 17:58
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

Chaq
27.07.2002, 19:04
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

Baegsch
27.07.2002, 21:18
die c lösung wär strstr(char *, char *);

xOOn
29.07.2002, 08:36
@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