String alphanumerisch filtern mit Hilfe von ASCII



  • nabend,

    schaut euch mal bitte den Code an und sagt mal bitte ob man da etwas optimieren kann oder ob etwas zuviel ist.

    dannach soll es in das überführt werden:

    **Eigentliche Aufgabenstellung:
    /* Converts a digit (part of a number representation)
    into the denoted number. Returns -1 if the character
    is not in '0'..'9', 'A'..'Z', or 'a'..'z'.*/

    int convertToNumber(char c){};**

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(){
        string str; 
        int vorhanden = 0;
        int a; 
        cout<<"Enter string : ";   
        cin>>str;
           for(a = 0; a!=str.length(); ++a){ /*Prints out each letter converted into a int value.*/
              if (int(str[a]) >=97 && int(str[a])<=122 || int(str[a]) >=65 && int(str[a])<=90 || int(str[a]) >=48 && int(str[a])<=57){
                 vorhanden = 2;}
              else{
                 vorhanden = 1;}
           }
        if (vorhanden==1){
           cout << "Sonderzeichen vorhanden!" << endl;}
        else {
           cout << "keine Sonderzeichen vorhanden!" << endl;}
        system("PAUSE");
        return 0;
    }
    

    Ausgabe:

    Enter string: 123!
    Sonderzeichen vorhanden!
    

    therotisch bei der letzten if abfrage:

    int convertToNumber(char c){
    ....
    if (vorhanden==1){
    return -1;}
    else {
    return 0;}
    }

    in das hier abändern? nur ist mir dieser "char c" ein dorn im auge
    (Übergabeparameter)
    Ist die Lösung zu umstaendlich für die Aufgabenstellung?

    danke für Eure Antworten.



  • für vorhanden würde ich erst mal nen enum vorschlagen, wenn kein boolean mehr reicht...

    if (int(str[a]) >=97 && int(str[a])<=122 || int(str[a]) >=65 && int(str[a])<=90 || int(str[a]) >=48 && int(str[a])<=57)
    

    ist nich nur sehr hässlich und unleserlich sondern auch unnötig: die Zahlenwerte ersetzt du einfach durch 'A' / 'a' / '0' / '9' / ...
    und den cast (ok, eigtl ist es kein cast ^^) nach int kannst du auch weglassen...

    wenn du das geändert hast, kannst du ja noch mal posten, wie es dann aussieht...

    bb



  • Schau dir am besten mal <cctype> an, da gibts einige nützliche Funktionen.


  • Administrator

    Nexus schrieb:

    Schau dir am besten mal <cctype> an, da gibts einige nützliche Funktionen.

    Du meinst wohl <locale> 😉
    C Funktionen vorschlagen gehen, tz, schäm dich! 😃

    Grüssli



  • isalnum(str) aus cctype.h ist mir bekannt.
    Aber gewollt war es als Übung einen string mit ASCII zu prüfen.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int isalphanum(){
        string str; 
        int vorhanden = 0;
        int a; 
        cout<<"Enter string : ";   
        cin>>str;
           for(a = 0; a!=str.length(); ++a){ 
                if (a >=97 && a<=122 || a >=65 && a<=90 || a >=48 && a<=57){          
                    vorhanden = 2;}
                else{
                    vorhanden = 1;}
           }
        if (vorhanden==1){
            return -1;}
        else {
            return 0;}
    }
    int main(){
        isalphanum();
        system("PAUSE");
        return 0;
    }
    

    geht das noch kürzer?
    evtl statt:
    vorhanden = 2; -> return 0;
    vorhanden = 1; -> return -1;
    und die lettzte if-abfrage komplett wegenlassen?
    danke 😃



  • du sollst statt den zahlen die buchstaben/ziffern/... nutzen...

    for(a = 0; a!=str.length(); ++a){ 
                if (a >=97 && a<=122 || a >=65 && a<=90 || a >=48 && a<=57){          
                    vorhanden = 2;}
                else{
                    vorhanden = 1;}
    

    funktioniert niemals...
    du überprüfst den index aber nicht, was an der stelle des index steht...

    bb



  • void isAlphanum(){
        string str;
        int vorhanden = 0;
        int a;
        cout<<"Enter string : ";  
        cin>>str;
           for(a = 0; a!=str.length(); ++a){ 
              int c=str[a];
              if (c>=97 && c<=122){} 
              else if(c>=65 && c<=90){}
              else if(c>=48 && c<=57){}
                else {
    		cout<<"Sonderzeichen vorhanden" << endl;
    		return;
    	  }
         }
      cout << "keine Sonderzeichen " << endl;
    }
    

    ich habs! 😃


Anmelden zum Antworten