"strlen" hört ab LEERZEICHEN auf zu "zählen"



  • HI,
    ich habe folgendes Problem...
    In meinem Programm, soll strlen die Länge eines Strings bestimmen, hört aber bei Leerzeichen auf zu "zählen", weiß einer von euch warum, oder wieso?

    #include "stdafx.h"
    #include "stdio.h"
    #include "iostream"
    using namespace std;
    
    void main()
    {
    	char c;
    	char string[100];
    	char string_help[100];
    	double laenge;
    	int i = 0;
    	int x = 0;
    
    	printf ("Eingabe: ");
    	fflush(stdin);
    	cin >> string;
    	laenge = strlen(string );
    
    	for (i=0; i<= laenge; i++)
    	{
    		fflush(stdin);
    		c = string[i];
    
    		if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '\\' || c == '.' || c == ':' || c == ' ' || c >= '0' && c <= '9' || c == '_')
    		{
    			string_help[x] = c;
    			x++; 
    		}
    	}
    
    	string_help[x] = '\0';
    
    	cout << "Ausgabe (korrigier): ";
    	cout << string_help;
    	fflush(stdin);
    	getchar();
    }
    

    Greetz
    Die Eule



  • Zwei Sachen ;):
    - "cin" liest nur bis zum Leerzeichen ein
    - Die einzelnen "a&&b" in der langen if-Bedingung würde ich einklammern



  • das ist c++ und kein ansi c 👎



  • Und bei fflush(stdin) kommt es zu undefinierten verhalten...
    klick mich

    Gruß
    zeigerzeiger



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ehm und for (i=0; i<= laenge; i++) macht aua ^^ muss i < laenge heißen 😃 bzw das macht nicht aua aber string[laenge] ist immer '\0' == 0.



  • #include <iostream>
    #include <limits>
    using namespace std;
    
    void clear_stream(istream& in)
    {
        in.clear();
        in.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    
    int main()
    {
        char eingabe[100];
        char ausgabe[100];
        char c = 0;
        size_t j = 0;
    
        cout << "Eingabe: ";
        cin >> eingabe;
        clear_stream(cin);
    
        for(size_t i = 0; i < strlen(eingabe); ++i)
        {
            c = eingabe[i];
    
            if ((c >= 'a' && c <= 'z') ||
                (c >= 'A' && c <= 'Z') ||
                c == '\\' ||
                c == '.' ||
                c == ':' ||
                c == ' ' ||
                (c >= '0' && c <= '9') ||
                c == '_')
            {
                ausgabe[j] = c;
                ++j;
            }
        }
    
        ausgabe[j] = '\0';
        cout << "Ausgabe: " << ausgabe << std::endl;
        cin.get();
    }
    


  • Vielen Dank für, all die Hilfe, vorallem für die schnelle! Hilfe.
    Habs umgesetzt (hoffe ich :D) und nun funzts auch wie gewünscht XD

    Danke
    Die Eule


Anmelden zum Antworten