[c++] String in String suchen, zerlegen, in Feld speichern

fujifilm

Mitglied
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:
C++:
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/library/aa383751(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
cwriter
 
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 Steiner_B,

bei mir siehts jetzt so aus und er meckert ein wenig:

C++:
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 :))
 
Zuletzt bearbeitet:
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:

C++:
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
fuji
 
Zuletzt bearbeitet:
Zurück