Möglichkeit, strings mit mehreren wörtern zu teilen?



  • Dann eben ohne das Zeug:

    #include <cctype>
    #include <string>
    #include <iostream>
    
    int main()
    {
    	using std::isspace;
    	using std::cout;
    	using std::string;
    
    	string foo[]{
    		"Die Kuh macht muh",
    		"Die Katze macht miau",
    		"Der Hund macht wau",
    	};
    	
    	for (unsigned i = 0; i < sizeof foo / sizeof *foo; ++i) {
    		for (unsigned pos = 0, end = foo[i].length(); pos != end;) {
    			while (pos != end && !isspace(foo[i][pos]))
    				cout.put(foo[i][pos++]);
    			cout.put('\n');
    
    			while (pos != end && isspace(foo[i][pos]))
    				++pos;
    		}
    
    		std::cout.put('\n');
    	}
    }
    

    Wenn Du std::isspace() nicht verwenden darfst dann schreibst Du Dir eben selbst eine Funktion die rudimentär dasselbe macht.

    bool my_isspace(int ch)
    {
    	return ch == '\t' || ch == '\n' || ch == '\v' || ch == '\f' || ch == '\r' || ch == ' ';
    }
    


  • @Swordfish
    oha danke 🙂

    was genau ist damit gemeint (Zeile 17) sizeof foo / sizeof *foo
    ist das jetzt ein pointer, oder multiplizierst du da? 😃
    diese Art mit [ ...] [... ] haben wir in dieser form echt noch nie verwendet ... wenn ich den code durchgehe verstehe ich einiges, aber einiges nicht
    zb auch "cout.put" ich kanne nur cout<<



  • @DirkB

    cout << str[str_pos].at(l); // aber hier funktioniert es ?

    			if (str[str_pos].at(l) == 'x') // warum funktioniert es hier mit den einzelnen zeichen nicht
    			{
    				cout  << endl;
    			}


  • @mmm_1482_ sagte in Möglichkeit, strings mit mehreren wörtern zu teilen?:

    // aber hier funktioniert es nicht?

    was meinst du damit?
    Wie äußert sich das?



  • @DirkB also zeile 6 wird wirklich jeder buchstabe einzelns ausgegeben, aber in zeile 8 (obwohl genau dieser wert da steht) wird der wert nicht als solches angenommen.
    Müsste das in beiden Fällen nicht derselbe Wert sein?

    for (; str_pos < text; str_pos++)// gehe jeden string durch
    {
    	for (; l < str[str_pos].length(); ) // gehe jedes Zeichen des jeweiligen strings durch
    	{
    		
    			cout << str[str_pos].at(l); // aber hier funktioniert es nicht?
    
    			if (str[str_pos].at(l) == 'x') // warum funktioniert es hier mit den einzelnen zeichen
    			{
    				cout  << endl;
    			}
    		l++;
    	}
    	l = 0;
    	cout << endl;
    	
    }


  • @DirkB hä auf einmal funktioniert es XD
    ach perfekt! das programm läuft 😃 danke!


Anmelden zum Antworten