"leerer" char



  • Hallo ihr lieben leute. Ich bin neu hier im forum, und habe da ein kleines porblem...
    ich muss für die schule ein programm schreiben, welches automatisch aus dem satzteil "HBT 41" ein "IT 31" macht.

    char satz[]="Die Klasse HBT 41 ist im 2.ten Stockwerk";
    	int i,j;
    
    	j=strlen(satz);
    	for(i=0;i<j;i++)
    	{
    		if((satz[i]=='H')&&(satz[i+1]=='B')&&(satz[i+2]=='T'))
    		{
    			satz[i]='...';
    			satz[i+1]='I';
    			satz[i+4]='3';
    		}
    	}
    	cout<< satz <<endl;
    	cout<< "\n\tSatzlaenge: "<<j<<endl<<endl;
    

    was muss ich bei den "'...'" eingeben, damit die stelle im string, die mit dem "H" belegt ist komplett gelöscht wird?.
    habe schon ein paar sachen ausprobiert, die aber nicht fnktionierten, bzw. nicht so wie ich es wollte.

    bitte helft mir.
    danke schon im voraus



  • Ist bei einem Feld nicht möglich.
    Bei deiner (schlechten) statischen Struktur wärs am besten, dass du einfach ein Leerzeichen setzt.
    Ansonsten kannst du dein PRogramm auch mal mit std::string schreiben. Mit dieser Klasse könntest du dann den Buchstaben da rauslöschen lassen.



  • danke für die hilfe, aber leider bringt mir das nicht sehr viel ^^
    wir haben in der shcule den auftrag bekommen, aus dem "HBT 41" n "HBI 51" zu machen, was auch echt einfach war, aber unser lehrer meinte das MUSS mit diesem "rohling" gehen, daraus ein "IT 31" zu machen.
    wenn ich einfach n leerzeichen dafür einsetze, dann werde hinterher ja 2 leerzeichen angezeigt, und das ist ja auch nicht der sinn der sache.

    und zu std::string find ich in meinem MS Visual keine hilfe

    bitte heeeeelft mir 🙂



  • Du kannst das Leerzeichen zwar nicht löschen, aber du kannst es ans Ende des Satzen verschieben. Dann würde es ja keinem Auffallen. Ich denke, das ist das, was auch dein Lehrer will.

    Du musst nur alle Satzzeichen eins nach vorne verschieben (natürlich erst ab da, wo das überflüssige Leerzeichen ist)



  • das hört sich gut an. jetzt müsste ich nur noch iwssen, wie das geht.
    sry bin echt ganz neu in diesem metie.

    greetz



  • Nach vorne schieben geht in etwa so:

    for (unsigned int i = schiebe_startposition; i < strlen(satz); i++){
      satz[i] = satz[i + 1];
    }
    

    Dadurch wird auch das 0-Zeichen am String-Ende mit nach vorne geschoben. Wenn du das nicht willst musst statt i < strlen(satz) schreiben: i < strlen(satz) - 1 und satz[strlen(satz)] auf ' ' setzen.

    mfg



  • bool inside = false;
    for(i=0;i<j;i++)
        {
            if((satz[i]=='H')&&(satz[i+1]=='B')&&(satz[i+2]=='T'))
            {
                satz[i]='...';
                satz[i+1]='I';
                satz[i+4]='3';
                inside = true;
            }
            if(inside)
            {
                char ch = satz[i];
                satz[i] = satz[i+1];
                satz[i+1] = ch;
            }
        }
    

    Bin mir nich sicher. Must du mal testen.



  • also der Code sieht jetzt wie folgt aus...

    {
    	char satz[]="Die Klasse HBT 41 ist im 2.ten Stockwerk";
    	int i,j,l;
    
    	j=strlen(satz);
    	bool inside = false;
    	for(i=0;i<j;i++)
    	{
    		if((satz[i]=='H')&&(satz[i+1]=='B')&&(satz[i+2]=='T'))
    		{
    			satz[i]=' ';
    			satz[i+1]='I';
    			satz[i+4]='3';
    			inside=true;
            } 
    	}
    		if(inside) 
            { 
                char ch = satz[i]; 
                satz[i] = satz[i+1]; 
                satz[i+1] = ch;
                l=strlen(satz)+1;
                satz[l]='\b';
    		}
    	cout<< satz <<endl;
    	cout<< "\n\tSatzlaenge: "<<j<<endl<<endl;
    }
    

    aber er zeigt letzt 2 leerzeichen an, und so ein seltsames zeichen.

    l=strlen(satz)+1;
                satz[l]='\b';
    

    bewirkt, das dieses seltsame zeichen am ende des strings verschwindet.

    aber es sind halt immer noch 2 leerzeichen 😞



  • {
        char satz[]="Die Klasse HBT 41 ist im 2.ten Stockwerk";
        int len=strlen(satz);//sprechende namen ;)
        int i;//weniger ist mehr ;)
    
        for(i=0;i<len;++i)
        {
            if((satz[i]=='H')&&(satz[i+1]=='B')&&(satz[i+2]=='T'))
            {
                satz[i+1]='I';
                satz[i+4]='3';
                break; //schleife verlassen
            } 
        }
        // satz ist jetzt "Die Klasse HIT 31 ist im 2.ten Stockwerk"
        for(;i<len;++i) //neue schleife, i steht jetzt auf dem 'H'
        { 
            satz[i] = satz[i+1];
        }
        cout<< satz <<endl;
        cout<< "\n\tSatzlaenge: "<<len<<endl<<endl;
    }
    


  • vielen vielen danke ^^
    das funktioniert einwandfrei


Anmelden zum Antworten