7Danke
ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
941
941
EMPFEHLEN
-
Moin,
nachdem mir heute schon super geholfen wurde; habe ich 2,3 weitere Fragen.
Ich habe schon fleißig das Netz abgesucht und ein paar Hinweise gefunden. Allerdings noch keine zufriedenstellende Lösung.
String in String suchen:
Code cpp:1 2 3 4 5 6 7 8
string zeile="sehr viel Text in dem auch mal AR vorkommt" size_t found; found = zeile.find("AR "); if(found != string::npos) { ar=0; }
Dazu habe ich nur "Lernfragen".
1) Wofür steht das size_t?
2) Wofür steht das string::npos?
3) Gibts so ne Art "c++ Allesbibliothek" bei der ich solche nachlesen kann? Dann würde ich sie hier nicht mehr stellen
String zerlegen:
In meiner Datei sind Zahlen durch Leerzeichen getrennnt. Vom Algorithmus würde ich es so machen:
1) Finde Postion des ersten Leerzeichens [das kann ich ja jetzt schon]
2) Kopiere String vom ersten Buchstaben bis zum Leerzeichen
3) Wandle String in double um
4) Kopiere Double in Feld [das kann ich glaub auch]
5) Lösche Kopierten String und fange bei 1) an
Wäre nice, wenn ihr mir wieder so gut wie gestern & heute helfen konntet.
Vielen Dank und beste Grüße
Fuji
-
Hallo
1.1) size_t ist dasselbe wie unsigned int (=ULONG_PTR) http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx. Was es bedeutet, weiss ich aber auch nicht.
1.2) http://www.cplusplus.com/reference/string/string/npos/ Ich denke, es heisst number of position
1.3) Ja, die gibts. MSDN oder http://www.cplusplus.com/. Um etwas zu suchen, gib die Suche gefolgt von "msdn" bei Google ein. Das ist genauer als die Bing-Suche in der MSDN.
Zu den 2. Fragen habe ich keine Antwort, da ich mich mit Streamklassen nicht so gut auskenne. Wenn du willst, kann ich dir die c-Funktionen zeigen. Die funktionieren auch.
Gruss
cwriterIntel inside - Idiot outside :-)
Ich schreibe in C und bin Anfänger.
______________________________
Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
Danke
-
Hallo,
Zum 2. Problem:
Ich würde wie folgt vorgehen:
1. Zahlenstring = ""
2. Ein Zeichen einlesen
3. Wenn Zeichen != Leerzeichen -> an Zahlenstring anhängen
Wenn Zeichen == Leerzeichen -> Zahlenstring z.B.: mit atof in double umwandeln und Zahlenstring = ""
-
Moin ihr beiden,
vielen Dank schonmal fürs Helfen.
Mit welchem Befehl les ich denn das nächste Zeichen ein?
Grüße
Fuji
-
Hallo,
Wenn du einen ifstream verwendest, dann ifstream.get(). Wenn du c-style File-Handling mit fopen usw. verwendest dann fgetc().
-
Moin Steiner_B,
bei mir siehts jetzt so aus und er meckert ein wenig:
Code cpp:1 2 3 4 5 6 7
datei.fgetc(buffer); //fgetc() if (buffer==" ") { zahlInDouble = atof(zahlInBuchstaben.data()); NasaKoeff[speziesZuweisung-1][Koeff]=zahlInDouble; Koeff++; }
Fehlermeldungen:
..\Nasakoeff.cpp:48: error: 'struct std::string' has no member named 'fgetc'
..\Nasakoeff.cpp:49: warning: comparison with string literal results in unspecified behaviour
..\Nasakoeff.cpp:49: error: ISO C++ forbids comparison between pointer and integer
..\Nasakoeff.cpp:51: error: 'atof' was not declared in this scope
Viele Grüße
Fuji
-
Hallo,
Zeile 48: Schau in die Doku, fgetc ist auch kein Member von String. Wenn du die Daten schon als String hast musst du außerdem in einer Schleife drüberwandern und einfach an der richtigen Stelle im String nachschauen. Deine ursprüngliche Frage was ja auf eine Datei bezogen.
Zeile 49: Welchen Typ hat den Buffer? Wenns ein char ist musst du ihn auch mit einem Char vergleichen. Strings werden in " eingeschlossen, chars in ' .
Zeile 49(2): Ist buffer ein char*? Dann musst du ihn zuerst dereferenzieren.
Zeile 51: Schau in der Doku nach in welcher Headerdatei atof deklariert ist. Nebenbei: Wenn zahlInBuchstaben ein String ist, bekommst du den c-string mit .c_str() und nicht mit .data()
-
Moin Steiner_B,
vielen Dank für die Hilfe.
Habe alles korrigiert. Mir fehlt nur noch der Befehl um ein String auf Buchstaben zu durchsuchen.
Das mit einer for-Schleife würde ich hinkriegen, mir fehlt nur der Befehl, zeile.position oder so.
Also das er bei Buchstaben "1" anfangen soll. Habe dazu Sachen im Netz gefunden, die leider nicht funktionieren.
mfg
fuji
ps.: Wenn das funktioniert bin ich mit der .txt-Datei durch
)
Geändert von fujifilm (23.09.11 um 12:22 Uhr)
-
Wenns ein std::string ist: Der hat eine find-Methode. Oder hab ich die Frage jetzt nicht verstanden?
-
Ist ein std::string.
Ich will folgendes machen:
Checke String an Postion 1? <== das bekomme ich noch nicht hin.
Ist es ein Leerzeichen?
Wenn nein füge die Zahl dem String zahlInBuchstabe hinzu
Wenn doch wandle zahlAlsBuchstabe in zahlInDouble um. <== das atof .data braucht habe ich irgendwo im Netzt gelesen. Wenns nachher nicht funktioniert, verwende ich .c_str().
Das habe ich bisher so umgesetzt:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
for (int i=0,i!=50,i++) { if (*buffer==' ') { zahlInDouble = atof(zahlInBuchstaben.data()); NasaKoeff[speziesZuweisung-1][Koeff]=zahlInDouble; i=50; Koeff++; if (Koeff==4) { Koeff=0; } } else { zahlInBuchstaben += *buffer; } } }
mfg
fujiGeändert von fujifilm (23.09.11 um 12:25 Uhr)
-
String an position 1: string.c_str()[1]. Soweit ich deinem Code aber jetzt entnehmen kann müsste eh alles stimmen, bis darauf, dass du im Falle eines Leerzeichens noch zahlInBuchstaben auf "" zurücksetzten musst.
Daher die Frage: Wo willst du nochmal auf Leerzeichen prüfen?
-
Innerhalb des stringes, den ich aus einer datei zuvor schon per getline in mein programm importiert habe.
Okay; dann probier ichs mit zeile.c_str()[1].
-
Funktioniert; hier noch der Teil des Programmes:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
for (k=1;k!=85;k++) { buffer=zeile.c_str()[k]; if (buffer==' ') { cout<<zahlInBuchstaben<<endl; zahlInDouble = atof(zahlInBuchstaben.data()); zahlInBuchstaben = ""; NasaKoeff[speziesZuweisung-1][Koeff]=zahlInDouble; Koeff++; if (Koeff==4) { Koeff=0; } } else { zahlInBuchstaben += buffer; } }
-
Hallo,
Naja, wenn du den String eh schon als ganzes im Speicher hast kannst dus überhaupt anders angehen:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
string s("14 13.5 8.9 400.12"); char* cstring = (char*)s.c_str(); int l = s.length(); int numberOfNumbers = 0; //Alle Leerzeichen durch '\0' = StringEnde ersetzen for (int i = 0; i < l; i++) { if (cstring[i] == ' ') { cstring[i] = '\0'; numberOfNumbers++; } } //Pointer auf den ersten Zahlenstring setzen char* startp = cstring; //Alle Zahlenstrings durchlaufen for (int i = 0; i <= numberOfNumbers; i++) { //Umwandlung nach double double d = atof(startp); std::cout << d << std::endl; //Auf den Beginn des nächsten Zahlenstrings setzen startp += strlen(startp) + 1; }
Da fällt nämlich der Aufwand für das kopieren der Zahlen in einen neuen String weg.
Ähnliche Themen
-
Regex String in Datei suchen und Zeichen aus String ausgeben.
Von BillaBong im Forum PHPAntworten: 3Letzter Beitrag: 05.01.09, 15:25 -
[C++]Nach String suchen, teilen und speichern
Von Seelenquell im Forum C/C++Antworten: 27Letzter Beitrag: 25.06.07, 09:27 -
String in einem String suchen und Anzahl ausgeben
Von y0dA im Forum JavaAntworten: 9Letzter Beitrag: 30.05.07, 16:02 -
string zerlegen
Von anfeanger83 im Forum PHPAntworten: 1Letzter Beitrag: 18.08.06, 10:11 -
String zerlegen
Von ulf123 im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 1Letzter Beitrag: 28.05.06, 22:38





Zitieren
Login






