PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String operationen



eviluser
16-05-2002, 14:41
hallo

gibt es eine geschickte methode einen String in einen String array aufzuspalten? also... angenommen ich habe einen satz:

Sting satz = "hallo ich bin evil user!";
String[] woerter = geschicktAufteieln( satz );

dann sollten woerter[ 0 ] == "hallo"; woerter[ 1 ] == "ich"; ... und so weiter

kann mir da einer helfen?

gruss

evil user

Doc Maverick
16-05-2002, 16:54
Hi,
ja es gibt eine ziemlich einfache Möglichkeit in JAVA 1.4. In dieser Version werden Regular-Expressions wie sonst unter Unix unterstütz. Deshalb findet man in der Klasse String die Methode String[] split(String regex), die einen String in ein Array aus Strings anhand der Ausdruckes regex aufspaltet.
In Deinem Fall sollte also:

woerter=satz.split(" ");

die gewünschte Wirkung erzielen.
Tschüß.

Vir@s
16-05-2002, 18:04
Welche Programmiersprache meinst du denn? =)

anda_skoa
16-05-2002, 19:44
Du kannst in früheren Verionen von Java auch den StringTokenizer verwenden.

Der teilt, so weit ich mich erinnern kann, nach einem Trennzeichen.
In deinem Fall " "

Aber wie Vir@s schon schrieb, wäre es vorteilhaft zu wissen, um welche Sprache es geht :p

Ciao,
_

Vir@s
16-05-2002, 20:58
Jep - da gibts wirkliche verdammt viele Möglichkeiten :)

eviluser
17-05-2002, 13:17
ups... java natürlich... ich vergesse immer das das forum ums programmieren allgemein geht... ;)

danke für die antworten!

gruss

evil user

eviluser
28-05-2002, 12:33
gibt es eine eingebaute möglichkeit stings zu sortieren (alphabetisch), bzw. 2 strings zu vergleichen wie beispielsweise:

String a="0001", b="0005";

if( a > b) ...
else ...

oder so... ;)

ich kann die zahlen nicht mit Integer.parse() umwandeln, da die zahlen zu "gross" sind.

gruss

Evil User

eviluser
28-05-2002, 13:31
habs!
is ok...

Nicolas
10-08-2002, 16:05
Ich bin gerade durch die Suchen-Funktion auf diesen Thread gestoßen. Ich brauche nämlich die gleiche Funktion, nur eben in C++. Ich habe mir zwar selbst schon sowas zusammengestrickt, aber das ist nicht optimal.

Danke im Vorraus.

anda_skoa
10-08-2002, 16:27
Original geschrieben von Nicolas
Ich bin gerade durch die Suchen-Funktion auf diesen Thread gestoßen. Ich brauche nämlich die gleiche Funktion, nur eben in C++.



#include <sstream>
#include <string>
#include <iostream>

using namespace std;

int main()
{
stringstream s;
s << "Das ist ein Test";
string str;

while (s >> str)
{
cout << str << endl;
}
return 0;
}


hth,
_

Nicolas
10-08-2002, 16:33
Danke für die schnelle Antwort, aber ich hab als Trennungszeichen ein Komma und wie funktioniert das dann?

Nicolas
10-08-2002, 17:25
Ich hab mein Problem gelöst:

#include <sstream>
#include <string>
#include <iostream>

using namespace std;

int main()
{
stringstream s;
s << "Das,ist,ein,Test";
string str;
int c;

do {
c=s.get();
if (c==',' || c==EOF) {
cout << str << endl;
str="";
}
else
str+=c;
}while (c!=EOF);

return 0;
}

anda_skoa
10-08-2002, 17:52
:)

Ich hab noch nicht viel mit C++ Standardstrings gearbeitet, war eine gute Übung:



vector<string> split(string input, string seperator)
{
string::size_type pos1 = 0;
string::size_type pos2 = 0;
vector<string> result;

while ((pos2 = input.find(seperator, pos1)) != -1)
{
result.push_back(input.substr(pos1, (pos2-pos1)));
pos1 = pos2 + seperator.length();
}

result.push_back(input.substr(pos1, (input.length()-pos1)));
return result;
}


Ciao,
_

Nicolas
12-08-2002, 15:43
Danke für deine Hilfe. Ich hab jetzt deinen Programmcode genommen, weil mir der geschickter erscheint. (Macht es dir was aus, wenn ich den Code einfach bei mir in mein Programm einfüge?)

anda_skoa
12-08-2002, 16:16
Original geschrieben von Nicolas
Danke für deine Hilfe. Ich hab jetzt deinen Programmcode genommen, weil mir der geschickter erscheint. (Macht es dir was aus, wenn ich den Code einfach bei mir in mein Programm einfüge?)

Nein, macht mir nichts aus, sonst hätte ich es wohl auch nicht gepostet :)

Ciao,
_

netmaster
17-03-2008, 21:41
Ich hole den Thread mal wider aus der Versenkung.
Vorab, es ist mein erstes Programm und wird auch wohl mein letztes sein.
Muss ich nur für die Arbeit machen, deswegen mein letztes und erstes in C++.
Aber ihr könnt mir bestimmt helfen. :-)

#include <iostream>
#include <fstream>
#include <strstream>
#include <string>
#include <list>
#include <sstream>
using namespace std;

void split (string & text, string & separators, list<string> & words)
{
int n = text.length();
int start, stop;
start = text.find_first_not_of(separators);
while ((start >= 0) && (start < n))
{
stop = text.find_first_of(separators, start);
if ((stop < 0) || (stop > n))
{
stop = n;
}
words.push_back(text.substr(start, stop - start));
start = text.find_first_not_of(separators, stop+1);
return words
}
}

int main()
{
char zeile [500]; // Zeile max 121 Zeichen
string Seite[1000]; // Datei Max 10000 Zeilen
ifstream dateiLese ("input.txt"); // Eingabe Datei
ofstream dateiSchreibe ("output.txt"); // Ausgabe Datei
if (dateiLese)
{
int i=0;
seperator=";";
// solange die Zeile nicht leer ist
while(dateiLese.getline (zeile, 500))
{
// Zeile lesen
Seite[i]=zeile;

// Hier kann die Zeile bearbeitet werden
dateiSchreibe << split (Seite[i],";","Hier weis ich auch nicht, was ich eintragen soll") << "\n";

// Zeile in ausgabe.txt schreiben
dateiSchreibe << i << " " << Seite[i] << "\n";
i++;
}
dateiLese.close (); // Datei schliessen
dateiSchreibe.close(); // Datei schliessen
}
return 0;
}
Hab die Schnipsel aus dem Internet und etwas zusammen geschrieben.
Leider klappt die Splittfunktion nicht und ich habe keinen blassen warum nicht.
Verstehe auch nicht wirklich alles was das steht.
Die Datei input.txt besteht aus mehreren Zeilen, deren Felder durch Delimter ";" getrennt sind.
Diese will ich nun splitten und in die Datei output.txt untereinander ausgeben
und wenn eine Zeile fertig ist, dann nochmal die komplette Zeile darunter.
Hab auch schon gegoogelt. Da finde ich immer den gleichen Code für die splitt-Funktion,
aber es funtzt einfach nicht.
Ich benutze bcc5.5 auf Komandozeilenebene und als Editor habe ich Textpad im Einsatz.
Folgender Fehler bingt mir das Teil beim Compilieren:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\CPP\test.cpp:
Error E2467 C:\CPP\test.cpp 24: 'split(string &,string &,list<string,allocator<string> > &)' cannot return a value in function split(string &,string &,list<string,allocator<string> > &)
Error E2378 C:\CPP\test.cpp 24: Return statement missing ; in function split(string &,string &,list<string,allocator<string> > &)
Error E2451 C:\CPP\test.cpp 36: Undefined symbol 'seperator' in function main()
Warning W8030 C:\CPP\test.cpp 44: Temporary used for parameter 'separators' in call to 'split(string &,string &,list<string,allocator<string> > &)' in function main()
Warning W8030 C:\CPP\test.cpp 44: Temporary used for parameter 'words' in call to 'split(string &,string &,list<string,allocator<string> > &)' in function main()
Error E2064 C:\CPP\test.cpp 44: Cannot initialize 'list<string,allocator<string> > &' with 'char *' in function main()
Error E2342 C:\CPP\test.cpp 44: Type mismatch in parameter 'words' (wanted 'list<string,allocator<string> > &', got 'char *') in function main()
Error E2094 C:\CPP\test.cpp 44: 'operator<<' not implemented in type 'ofstream' for arguments of type 'void' in function main()
*** 6 errors in Compile ***

Prozess beendet mit Exit-Code 1

Ich hoffe, ihr könnt mir helfen.
Vielen Dank im Voraus.

ContainerDriver
18-03-2008, 13:01
Hallo,

der Code schaut etwas wüst aus.
Schau dir mal http://www.oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html unten an. Da gibt es genau, was du brauchst.

Gruß, Florian

netmaster
18-03-2008, 17:25
Super, Danke.
Klappt genau so wie ich es brauche.
Nochmals Danke.

netmaster
16-04-2008, 16:58
Ich müsste nochmal eure Hilfe in Anspruch nehmen. :-)
Habe einen String, den von Position1 bis Position2 auslesen will
und in einen String speichern.

string str = "meinHausistbunt"
Nun brauche ich Befehl, so wie unter einer Bash "cut".
Position1=5
Position2=8
Ergebnis=Haus

Hab hier auch mittlerweile mehrere Bücher liegen, da steht sowas nicht drin.
Hab strlen, strcpy, strcmp und strcut gefunden, aber mehr ist in allen Büchern nicht drin.
Im Netz hab ich leider auch nix gefunden.
Ich hoffe, hier könnt mir da weiterhelfen.
Vielen Dank schon mal im Voraus.

jeebee
16-04-2008, 18:49
string::substr (http://www.cplusplus.com/reference/string/string/substr.html) sollte doch sein was du willst.
string substr ( size_t pos = 0, size_t n = npos ) const; du musst nur anstatt Anfangs- und Endposition Anfangsposition und Länge angeben.

HTH jeebee

PS: ich nehme an es geht immer noch um C++.
PS2: die Funktionen die du erwähnst sind C- und nicht C++-Funktionen und erwarten ein const char * als Eingabe und nicht einen string.
PS3: strcut hab ich in meinen man-pages nicht gefunden.

netmaster
16-04-2008, 19:33
Supi. Das war genau was ich suchte.
Der Link ist ja echt Spitze.
Direkt in die Favs gelegt. :-)
Ich danke dir.