Substr help



  • hey ich würde gerne von einem einem string circa 3 substrings erstellen

    das problem ist nur das die abstände der Worte im String mir unbekannt sind.

    das heißt zb

    Vorname Nachname Punkte

    Dieter Rolf 15

    so gut nun das problem das der Kerl Dieter Rolf heißt weiß ich ja nicht also weiß ich nicht wann ich den string schneiden kann (btw die Namen in dem string sind maximal durch EIN whitespace getrennt)

    und ich dachte mir vll gibt es eine möglichkeit einen substr zu erstellen sobald ein whitespace erscheint.

    aber vll hat sich die Frage eh erledigt weil ich müsste einen substr. in int konvertieren und zurück um die Punkte zu bearbeiten. Lieben Gruß Codi_Coder





  • So?

    std::string blah("Dieter Rolf 15");
    
    std::stringstream blabla(blah);
    
    std::string vorname, nachname;
    int punkte;
    
    blabla >> vorname >> nachnahme >> punkte;
    


  • Danke für die Post`s

    zu Bimbam danke ich konnte mir somit schon schnell helfen und ethon so meinte ich das nicht wirklich, habe jetzt meine eigene kleine Methode entwickelt

    also die Datenbank ( des txt file) sieht nun so aus

    Punkte Vorname Nachname
    15 Dieter Rolf

    somit kann ich schnell das erste whitespace abfangen es mittels streamstring einer int zu weisen und diese weiter behandeln.

    gut. aber wozu mache ich das überhaupt?

    Ich möchte ein Prämien programm entwickeln mittels Klassen.

    es soll eine kleine Datenbank geben (ein txt file) darin enthalten ein Costumer mit vor und nachname und seine Punkte wenn jemand dann so und so viele Punkte gesammelt hat bekommt er eine Prämie und die Punkte verfallen wieder.

    ja gut, ich hatte schon eine methode entwickelt um auf die Datenbank zuzugreifen nach dem zu suchen und mir einen Costumer rauszuholen diesen rausgeholten habe ich einem string zugewiesen, diesen dann gesplitet und seine Punkte von seinem String einem Integer zugewiesen.

    ja dann wollte ich beliebig viele Punkte hinzufügen und diesen dann wieder zusammen "kitten" und wieder dem Orginal string geben.

    soweit die Theorie in der Praxis hatte ich die SUFU gebaut sie hatte funktioniert, habe dann aber zweimal den gleichen vornamen in die DB eingegeben und siehe da er findet nichts mehr habe mal zu testzwecken alle ausser einen rausgenommen spezifisch diesen gesucht und er spuckt mir nichts mehr aus.
    Nun bin ich doch verwundert. und kann an dieser stelle nicht weiter machen wenn ich keinen User finden kann.

    ich hoffe man kann verstehen was ich bastle.

    ich werde mal den code posten vll sieht ja einer woran es harkt. wäre echt gut 😉

    #pragma once
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
    	using namespace std;
    class CPreamie
    {
    private:
    	string sCostumer;
    	int iPoints;
    
    public:
    	CPreamie(void);
    	//~CPreamie(void);
    	string sgenerateCostumer(string);
    	string sSearchCostumer(string,string);
    	string sgetCostumer();
    	string sgetPraemie();
    	int isplitCostumer();
    	int isetPoints(int);
    	int igetPoints();
    };
    

    Praemie.h

    #include "Preamie.h"
    
    CPreamie::CPreamie(void)
    {
    }
    
    string CPreamie::sSearchCostumer(string Username, string Usernamefind)
    {
    	ifstream userfind;
    
        userfind.open("Costumer.txt", ios::in);
        bool abort= false;
        while (!userfind.eof() && !abort)     
        {
    
            getline(userfind, sCostumer);   
            if(Usernamefind == Username) abort = true;
            if(abort) 
    		{
    			sCostumer = Username;
    		}
    
        }
        userfind.close(); 
    	return sCostumer;
    }
    
    string CPreamie::sgenerateCostumer(string sNewUser)
    {
    	fstream Useradd;
        Useradd.open("Costumer.txt", ios::out|ios::app);      
        Useradd << sNewUser << endl;                       
    
        Useradd.close(); 
    	return 0;
    }
    
    string CPreamie::sgetCostumer()
    {
    	return sCostumer;
    }
    
    string CPreamie::sgetPraemie()
    {
    return 0;
    }
    
    int CPreamie::isplitCostumer()
    {
    	string sCostumersplit;
    	int iPointz;
    	sCostumersplit = sCostumer;
    	int ipostition;
    	size_t found1;
    
    	found1=sCostumersplit.find(' ');
    	if (found1!=string::npos)
    	{
    
        ipostition = int(found1);
    
    	}
    
    	sCostumersplit = sCostumersplit.substr (0,found1);
    
    	stringstream sstr(sCostumersplit);
    
    	sstr >> iPointz;
    
    	iPoints= iPointz;
    	return iPoints;
    
    }
    int CPreamie::isetPoints(int iaddPoint)
    {
    	iPoints = iPoints + iaddPoint;
    	return iPoints;
    }
    
    int CPreamie::igetPoints()
    {
    return 0;
    }
    /*CPreamie::~CPreamie()
    {;
    }*/
    

    Praemie.cpp

    #include <iostream>
    #include <string>
    #include "Preamie.h"
    #include <fstream>
    
    	using namespace std;
    
    	int main(void)
    	{
    
    		int ixtraPoints;
    		string sCostumerx;
    		string sCostumery;
    		string sNewCostumerx;
    		CPreamie MyPreamie;
    
    		getline(cin,sCostumerx,'\n');
    
    		MyPreamie.sSearchCostumer(sCostumerx,sCostumery);
    		cout << MyPreamie.sgetCostumer();
    
    		cin >> ixtraPoints;
    
    		cout << MyPreamie.isplitCostumer() << endl;
    		cout << MyPreamie.isetPoints(ixtraPoints);
    
    		cin.get();
    		cin.get();
    
    		return 0;
    	}
    

    Main.cpp

    hoffe vom stil her nicht so schlecht ^^

    Lieben Gruß und danke für die Hilfe Codi



  • string CPreamie::sSearchCostumer(string Username, string Usernamefind)
    {
        ifstream userfind;
    
        userfind.open("Costumer.txt", ios::in);
        bool abort= false;
        while (!userfind.eof() && !abort)    
        {
    
            getline(userfind, sCostumer);  
            if(Usernamefind == Username) abort = true;
            if(abort)
            {
                sCostumer = Username;
            }
    
        }
        userfind.close();
        return sCostumer;
    }
    

    Hier ist dein Fehler. Du prüfst in der while-Schleife, ob Usernamefind == Username, ohne diese beiden Parameter jemals geändert zu haben. Willst du vielleicht sCustomer auf Username testen? Was soll Usernamefind sein? Was soll das Spiel mit abort? Warum liest du die Zeilen in den Member sCustomer ein?

    Willst du vielleicht so etwas bauen?

    string Praemie::searchCostumer(const string& username)
    {
        ifstream in("Costumer.txt");
        string line;
        while (getline(in, line) && extractName(line) != username);
    	if(extractName(line) == username)
    		return line;
    	return "";
    }
    


  • Mach's dir doch etwas einfacher, und schreib die einzelnen Teile in eigene Zeilen. Dann kannst du auch doppelte Vornamen wie "Hans Peter" etc. abspeichern, und es ist gleichzeitig einfacher einzulesen.

    BTW: meinst du wirklich costumer oder vielleicht doch customer?



  • ja ich meinte customer
    aber das ist jetzt noch ned der fein schliff

    extractName(line)
    dieser aufruf macht mir kommer da ich mir nicht vorstellen kann was das bedeuted woraus sich es ableitet und google hilft mir auch nicht

    und sCostumer wird in der Header datei unter private: angelegt..^^

    das ist der string mit dem ich durcharbeite^^

    ich hab es mal ein wenig abgeändert

    string CPreamie::sSearchCostumer(string username)
    {
    
    	ifstream in("Costumer.txt");
        string line;
        while (getline(in, line) && extractName(line) != username);
        if(extractName(line) == username)
    	sCostumer = line;
    	return sCostumer;
    }
    

    so sieht es jetzt aus funktioniert aber nicht durch das extractName(Line) und kann mir nicht erklären was es macht der rest ist mir in etwa schlüssig..

    LG Codi



  • Ich dachte, es wäre offensichtlich: extractMin ist eine von dir zu schreibende Funktion, die aus einer Zeile den Namen des Nutzers extrahiert und zurückgibt. Wie du diese Funktion implementierst, hängt von dem Aufbau deiner Zeilen ab.



  • ^sorry aber irgendwie sehe ich grad nicht so wie ich das umsetzen soll
    mhh
    ist wohl schon arg spät ich werde mich wohl mal nach der Schule Morgen dransetzten

    ich danke soweit mal allen und Gute Nacht

    btw: wer noch ne idee hat gerne posten

    LG: COdi



  • Hau das C-Präfix weg.


Anmelden zum Antworten