C :: Aufgabe #61 :: Lösung #2

1 Lösung Lösung öffentlich
#61

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)
#2
vote_ok
von devnull (8870 Punkte) - 29.11.2014 um 19:49 Uhr
Quellcode ausblenden C-Code
/*****************************
 * 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;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben