Problem in C mit einem Programm zum Zeichen zählen
-
^^also die formatierung von dem code ist ja wohl gruselig. rück den mal vernünftig ein, öffnende { in die nächste zeile und so. so mag das ja keiner lesen. *fg*
-
Naja ich denke jedem seins
Gibt ja keinen offiziellen Standart oder?
Was macht denn die Zeile.
Die versteh ich nicht so ganz.c2=(treffer[i]>' ')?treffer[i]:' ';
Des weitern habe ich die Funktion tolower eingesetzt hier in der Einlesen Funktion.
void Einlesen(char *treffer,int *anzTreffer) { char kette[151]; int i; int j; int c; printf("Bitte Zeichenkette (max.150) eingeben: "); fgets(kette ,151,stdin); for (i = 15; i < 256; i++) { c=intToChar(i); while (kette[i]) { c=kette[i]; putchar (tolower(c)); i++; } for (j = 0;j <strlen(kette);j++) { if(c==kette[j]) { anzTreffer[i]++; treffer[i]=c; } } } }
Aber er macht mir die nicht groß. Die Funktion muss doch das Arry kette durchgehen und jeden eingegeben Buchstaben klein umwandeln oder?
Oder wo muss ich sie einsetzen?Lg
-
TeamNoX schrieb:
Naja ich denke jedem seins
Gibt ja keinen offiziellen stan**** oder?
nein aber es gibt definitive nogo's
-
du meinst mit den { direkt hinter der anweisung?
alsoif (a>b) {
?
Weil sonst fällt mir nichts an der Formatierung von kermitaner.
Macht auch 3 Leerzeichen immer usw.Lg
-
sowas zum beispiel
for (i=spalte;i<4;i++){ printf(" |"); } printf("\n"); //oder int i,spalte=0; char c2; //oder } printf("|-------------------------------------------------------|\n"); }
egal welchen stil man verwendet das lässt dir keiner durchgehen...
außer er ist masochist, solls ja auch gebenlg lolo
-
naja ich konnte es lesen ^^
das reicht.Aber du könntest du mir helfen bei dieser toLower Sache.
Das will er mir nicht so richtig machen.Lg
-
Aber du könntest du mir helfen bei dieser toLower Sache.
Das will er mir nicht so richtig machen.kette[i]=tolower(kette[i]);
falls du dich fragst wie so ein code dann ausschauen muß damit einem da richtig einer ab geht :p
http://www0.us.ioccc.org/years.html
also entweder ganz oder gar nicht in deinem fall eher garnicht
-
TeamNoX schrieb:
Was macht denn die Zeile.
Die versteh ich nicht so ganz.c2=(treffer[i]>' ')?treffer[i]:' ';
das ist so'ne kurzschreibweise für:
if (treffer[i] > ' ') c2 = treffer[i]; else c2 = ' ';
^^naja, eigentlich wäre eine funktion der bessere ersatz. das 'conditional' ist sozusagen ein 'if'-ausdruck mit rückgabewert, aber egal, das spielt hier keine geige.
TeamNoX schrieb:
Des weitern habe ich die Funktion tolower eingesetzt hier in der Einlesen Funktion.
...
Aber er macht mir die nicht groß.
tolower() macht ja auch alles klein. mit toupper() machste alles gross.
-
noobLolo schrieb:
kette[i]=tolower(kette[i]);
Und wohin muss das?
edit:
das mit dem i hat mich irritiert
es muss j heißen.
void Einlesen(char *treffer,int *anzTreffer) { char kette[151]; int i; int j; int c; printf("Bitte Zeichenkette (max.150) eingeben: "); fgets(kette ,151,stdin); for (i = 15; i < 256; i++) { c=intToChar(i); for (j = 0;j <strlen(kette);j++) { kette[j]=tolower(kette[j]); if(c==kette[j]) { anzTreffer[i]++; treffer[i]=c; } } } }
Lg
-
Es gibt aber noch ein Problem.
Er macht mir macht mir Ä Ö Ü nicht klein
void printTable(char *treffer, int *anzTreffer) { int i,spalte=0; printf("|-------------------------------------------------------|\n|"); for (i=1; i <=256; i++) { if(anzTreffer[i]>0) { printf("%c (0x%02X): %d |",(unsigned char)i,i,anzTreffer[i]); spalte++; if(spalte>=4) { printf("\n|"); spalte=0; } } } if (spalte>0) { for (i=spalte;i<4;i++) { printf(" |"); } printf("\n"); } printf("|-------------------------------------------------------|\n"); }
void Einlesen(char *treffer,int *anzTreffer) { char kette[150]; int i; int j; int c; printf("Bitte Zeichenkette (max.150) eingeben: "); fgets(kette ,151,stdin); for (i = 15 ; i < 256; i++) { c=intToChar(i); for (j = 0;j <strlen(kette);j++) { kette[j]=tolower(kette[j]); if(c==kette[j]) { anzTreffer[i]++; treffer[i]=c; } } } }
-
Hey ich habe noch eine andere Iddee gehabt.
Ist jetzt auch viel einfacherHier ist der Code dazu.
Nochmal danke für die Hilfe
#include <string.h> #include <stdio.h> #include <ctype.h> char intToChar(int); void Einlesen(char *treffer,int *anzTreffer); void printTable(char *treffer, int *anzTreffer); int askAgain(void); int main() { do { char treffer[256]; int anzTreffer[256]; char weiter; int i=0; for (i;i<256;i++) { treffer[i]=' '; anzTreffer[i]=0; } printf("========================\n"); printf("|| ||\n"); printf("|| Zeichenzaehler ||\n"); printf("|| ||\n"); printf("========================\n"); Einlesen(treffer, anzTreffer); printTable(treffer,anzTreffer); }while (askAgain()); return 0; } char intToChar(int i) { char c; if (i<256) { c=(char)i; return c; } return '\n'; } void Einlesen(char *treffer,int *anzTreffer) { unsigned char kette[151]; int i; int j; int c; do { kette[0] = '\0'; printf("Bitte Zeichenkette (max.150) eingeben: "); scanf("%150[^\n]", kette); clearBuffer(); //fgets(kette ,150,stdin); } while (kette[0] == '\0'); j = 0; while (kette[j] != '\0') { kette[j] = tolower(kette[j]); anzTreffer[kette[j]]++; j++; } /* for (i = 15 ; i < 256; i++) { c=intToChar(i); for (j = 0;j <strlen(kette);j++) { kette[j]=tolower(kette[j]); if(c==kette[j]) { anzTreffer[i]++; treffer[i]=c; } } }*/ } void printTable(char *treffer, int *anzTreffer){ int i,spalte=0; char c2; printf("|-----------------------------------------------------------|\n"); for (i=0; i <=255; i++) { if(anzTreffer[i]>0) { if (i < 32) printf("| "); else printf("| %c ", i); printf("(%#04x):%3d ", i, anzTreffer[i]); spalte++; if(spalte>=4) { printf("|\n"); spalte=0; } } } if (spalte > 0) { for ( ; spalte < 4; spalte++) { printf("| "); } printf("|\n"); } printf("|-----------------------------------------------------------|\n"); } int askAgain() { char weiter; do { printf("Moechten Sie das Programm noch einmal starten (j/n)?"); scanf("%c",&weiter); clearBuffer(); } while(weiter == 'n' && weiter == 'N' && weiter == 'j' && weiter == 'J'); if(weiter == 'n' || weiter == 'N') return 0; return 1; } void clearBuffer() { char dummy; do { scanf("%c", &dummy); } while (dummy != '\n'); }