string auslesen von bis
-
Naja mit std::string hast du ja kein Problem:
size_type begin = str.find_first_of('\"'); size_type end = str.find_last_of('\"'); size_type len = end - begin; str = str.substr(begin,len);
MfG SideWinder
-
Funktioniert kein Stück bei mir... Wie muss ich das anwenden, wenn der Text in einem string namens test sitzt? und der string test beinahltet folgendes:
string test="hust\"ladida\"gehweg";
-
Poste mal den Quellcode in dem du mein Beispiel angewendet hast. Eigentlich sollte das schon funktionieren
Ich verschieb dich mal ins Standard-C++-Forum, ist ja kein konsolenspezifisches Problem.
MfG SideWinder
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
wenn du den string,in einzelne char´s zerlegst, kannst du die char nach deinem
zeichen durchsuchen, und hast die position deines zeichensc++ code:
#include <string>
#include <iostream>using namespace std;
string wort;
char buchstabe(2);//char arrayfor(int i=0;i<wort.size();i++)//wort.size()ist anzahl der buchstaben
(
// buchstabe(i) enthält das i´te zeichen des wortes
cout<<buchstabe(i)<<endl;//ausgabe des arrays
)die klammersybole stimmen nicht!aufpassen
aber mit arrays und for schleifen kennst du dich ja aus!viel spass
-
Ich hab das mal so ausprobioert:
size_t begin = Source.find_first_of("int"); size_t end = Source.find_last_of(";"); size_t length = end - begin; variable = Source.substr(begin,length);
Aber scheint nicht zu funktionieren... müssen das chars sein? oder können es auch strings sein?
-
Achne... DFUnktioniert doch! Seh ich gerade... problem ist nur, das er nicht das letzte ";" nehmen soll, sondern das nächste...
-
Source.find(';', begin);
-
und wie eht es denn aus wenn ich so einen string habe:
From: XXXXX@XXXXX.com[cpp]
size_t begin = zeile.find_first_of("From:");
size_t end = zeile.find_last_of("\n");
size_t length = end - begin;
from = zeile.substr(begin,length);
cout <<"Absender: "<< from << endl;er soll mir das den Text nach "From:" bis zum zeilenende ausgeben..er macht es aber nicht...sondern haut das "From:" mit aus
..wäre für ne kleine hilfe sehr dankbar
-
du musst:
find_first_not_of("From: ");
-
danke schön!!!..noch eine kurze frage
hier hab ich so eine zeile
Date: Thu, 7 Apr 2005 21:21:29 -0700Hier mein code:
size_t begin = zeile.find_first_not_of(",");
size_t end = zeile.find_last_of("-");
size_t length = end - begin;
date = zeile.substr(begin,length);
cout <<"Datum: "<< date << endl;wie sage ihm jetzt aber das er die Uhrezit nicht mit raushauen soll
ala
size_t end = zeile.find_last_not_of('int:int:int');
-
naja das ist ja sicher alles ein string!
Somit kennt er int da nicht, die uhrzeit is auch nur nen string!Die soll er also nicht mit anzeigen?
Wenn der String IMMER so aufgebaut ist, such bis zum ersten Doppelpunkt, und ziehe davon 3 ab!
-
wie suche ich denn nach dem doppelpunkt..weil es ist ja der 2te doppelpunkt und nicht der erste??
-
Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
MSDN
Dennfind_first_not_of("From: ");
macht unter Umständen nicht das, was es soll.
-
ok habs..thx!!!!!!!!!!!!1
-
Achtung! schrieb:
Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
MSDN
Dennfind_first_not_of("From: ");
macht unter Umständen nicht das, was es soll.
erklärs bitte!
int main(int argc, char* argv[]) { string test="Date: Thu, 27 Jan 2005 21:03.01-0700"; size_t eras = test.find_first_of(":")+2; //date: loeschen, fuer suche nach : test.erase(0,eras); size_t end = test.find_first_of(":")-4; //: suchen, und 4 zeichen zurueckgehen size_t begin = test.find_first_of(",")+2; //, suchen, 2 zeichen nach vorn gehen size_t len = end-begin; string test2 = test.substr(begin,len+1); getch(); return 0; }
wenn string immer gleich aufgebaut ist, hab ich mir das überlegt( Ungetestet, und gibt sicher bessere methoden)
-
hab des jetzt so
size_t begin = zeile.find_first_not_of(", ");
size_t end = zeile.find_last_of(":");
size_t length = end - begin-5;
date = zeile.substr(begin,length);
cout <<"Datum: "<< date << endl;nur macht er die ausgabe vorne wieder mit
Date: thu, 7.12.2004er soll doch den anfang aber nach dem komma machen....
-
macht er bei meinem code auch!
-
noch ein Problem
wenn ich in einem email mehrere srings mit "Subject:" habe wie unten angegeben..wie sage ich im dass er nur das erste subject nehmen soll?
Subject: Erreichbarkeit aus Österreich/ DomainOnly Lite für .at/ günstigere Domainpreise
Date: Mon, 11 Jul 2005 14:20:38 +0200
MIME-Version: 1.0
Content-type: text/plain; charset=iso-8859-1
X-Virus-Scanned: amavisd-new at arcor.de
X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char D6 hex) in message header 'Subject': Subject: Erreichbarkeit aus \326sterreich/ Doma...das problem ist ja...das er bei der nächsten email das subject wieder asugeben soll..eben nur das erste in der aktuellen
-
hab das jetzt so
#include <fstream> // zur Dateibearbeitung #include <string> #include <iostream> #include <iomanip> using namespace std; int main() { string zeile ; string dateiname, from, date, subject; int length=0,end=0, begin=0, zaehler=0, doppeltf,doppelts,doppeltd; cout<< "Geben Sie den gewuenschten Dateinamen bzw. Emailfolder ein >>" << endl <<endl; cin>> dateiname; cout<< endl; ifstream datei(dateiname.c_str()); if (!datei) cout << "Fehler beim öffnen der Datei" << endl; while(getline(datei,zeile)) //Zeilenweise auslesen { if (zeile.find("X-Account-Key")!=string::npos){ // Wort enthalten doppeltf=0,doppelts=0,doppeltd=0; if (zeile.find("From: ")!=string::npos) // Wort enthalten { size_t begin = zeile.find_first_not_of("From: "); size_t end = zeile.find_last_of('\"'); size_t length = end - begin; from = zeile.substr(begin,length); if(doppeltf==0){ cout <<setw(10)<<left<<"Absender:"<< from << endl; doppeltf=1;} } if (zeile.find("Subject:")!=string::npos) // Wort enthalten { size_t begin = zeile.find_first_not_of("Subject:"); size_t end = zeile.find_last_of('\"'); size_t length = end - begin; subject = zeile.substr(begin,length); if(doppelts==0){ cout <<setw(10)<<left<<"Betreff:"<< subject << endl; doppelts=1;} } if (zeile.find("Date:")!=string::npos) // Wort enthalten { size_t begin = zeile.find_first_not_of("Date:")+6; size_t end = zeile.find_last_of(":"); size_t length = end - begin; date = zeile.substr(begin,length); if(doppeltd==0){ cout <<setw(10)<<left<<"Datum:"<< date << endl<<endl; doppeltd=1;} zaehler++; } } } cout << endl; cout<< "Anzahl der Emails: " << zaehler <<endl; if (!datei.eof()) return 2; //Fehler beim Lesen der Datei, bin noch nicht am Ende der Datei! return 0; //erwartetes Ende }
aber irgendwie macht er diese zeile
if (zeile.find("Return-Path:")!=string::npos){
doppeltf=0,doppelts=0,doppeltd=0;gar nicht..so dass er gar nicht weiter reinspringt...hilfe