C :: Aufgabe #61
1 Lösung
Berechnung der Anzahl der SMS Teile
Anfänger - C
von pocki
- 26.11.2014 um 12:13 Uhr
Schreibe ein Programm, dass eine Textdatei entgegen nimmt und einliest. Dabei soll pro Zeile der Textdatei eine beliebig lange Zeichenfolge eine SMS darstellen.
Zu jeder Zeile soll dann die Anzahl der dafür benötigten SMS ausgegeben werden.
Zu beachten ist, dass das erste SMS 160 Zeichen, das zweite SMS 150 Zeichen und jede weitere SMS 140 Zeichen lang sein kann.
(Die Zeichenkodierung kann vernachlässigt werden. Es wird angenommen, dass die GSM-7-bit Kodierung verwendet wird)
Zu jeder Zeile soll dann die Anzahl der dafür benötigten SMS ausgegeben werden.
Zu beachten ist, dass das erste SMS 160 Zeichen, das zweite SMS 150 Zeichen und jede weitere SMS 140 Zeichen lang sein kann.
(Die Zeichenkodierung kann vernachlässigt werden. Es wird angenommen, dass die GSM-7-bit Kodierung verwendet wird)
Lösungen:
/*****************************
* sms.c Anzahl SM ermitteln
*****************************/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#define SMS1 160
#define SMS2 150
#define SMS3 140
#define SMS12 (160+150)
#define SMS123 (160+150+140)
int main(int argc, char **argv)
{
FILE *fs;
char c;
int sms, nc, lnr;
// Datei zum Lesen öffnen oder stdin
if (argc > 1) {
if ((fs = fopen(argv[1], "r")) == NULL) {
perror(argv[1]);
exit(EXIT_FAILURE);
}
} else
fs = stdin;
// Datei lesen und zeilenweise die SMS-Anzahl bestimmen
sms = nc = lnr = 0;
while ((c = fgetc(fs)) != EOF) {
if (c == '\r' || c == '\v' || c == '\f')
continue;
if (c == '\n') {
if (nc > 0) {
printf("Zeile #%03d: %d SMS\n", ++lnr, ++sms);
sms = nc = 0;
}
continue;
}
nc++;
if (nc == SMS1+1 || nc == SMS12+1)
sms++;
else if ((nc-SMS123)%SMS3 == 1)
sms++;
}
if (nc > 0)
printf("Zeile #%03d: %d SMS\n", ++lnr, ++sms);
// Datei schliessen
if (fs != stdin)
fclose(fs);
return 0;
}
