#include #include #include #define MAXTEXT 200 void inline clearbuffer() { while (getchar() != '\n'); return; } int getline(char *query, char *str, int num) { char chr, *str_bak = str; printf("%s (%d ZEICHEN)\n", query,num); printf("S: "); while (666) { memset(str,0,num-1); while (( chr=getchar() )!='\n') { if (str>=str_bak+num) { printf("*** MAXIMAL %d ZEICHEN ERLAUBT ***\nS: ", num); str=str_bak; clearbuffer(); break; } *str=chr; str++; } if (!(str==str_bak)) { str=str_bak; return strlen(str); } } } long operator(char chr) { switch(chr) { case '+': return 1; case '-': return 2; case '*': return 3; case '/': return 4; default: return 0; } } long letters(char *string) { long i=0; while(isalpha(*string++)) i++; return i; } long number(char *string) { long i=0; while(isnumber(*string++)) i++; return i; } long whitespace(char *string) { long i=0; while(isspace(*string++)) i++; return i; } long wordcount(char *string) { long i=0; while(*string) { if(isalpha(*string) && !isalpha(*(string+1))) i++; string++; } return i; } void caesarcrypt_easy(char *mem, int offset) { do { if(*mem>='A' && *mem<= 'Z') //Gross-Buchstaben kodieren *mem='A'+(((*mem-'A')+offset)%26); } while(*mem++); return; } int main(void) { char eingabe[MAXTEXT+1], *chrptr=eingabe; long caesarshift; getline("TEXT [200]: ",eingabe,MAXTEXT); printf("ZAHLEN AM ANFANG: %ld\n",number(eingabe)); printf("WHITESPACE AM ANFANG: %ld\n",whitespace(eingabe)); printf("BUCHSTABEN AM ANFANG: %ld\n",letters(eingabe)); printf("ANZAHL WOERTER: %ld\n",wordcount(eingabe)); printf("\n\nRECHENZEICHEN ERKENNEN\n"); while(*chrptr) { long ltemp=0; switch(ltemp+=operator(*chrptr)) { case 1: printf("ADDITION\n"); break; case 2: printf("SUBTRAKTION\n"); break; case 3: printf("MULTIPLIKATION\n"); break; case 4: printf("DIVISION\n"); break; default: if(ltemp+=number(chrptr)) printf("ZAHL %d\n",(*chrptr)-0x30); ltemp+=whitespace(chrptr); break; } if(!ltemp) { printf("FEHLER BEI ZEICHEN %ld\n",chrptr-eingabe, '\n'); break; } chrptr++; } printf("\n\nCAESAR KODIERUNG\n"); do { printf("ALPHABET VERSATZ (1-26): "); scanf("%ld",&caesarshift); getchar(); } while(!caesarshift); printf("%s =>",eingabe); // Original-String ausgeben caesarcrypt_easy(eingabe, caesarshift);// Crypten printf(" %s\n",eingabe); // Kodierten String ausgeben return 0; }