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
enumvorschlagen, 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.
-
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!
