2 Übungen | |
→ | 2.5 Übung 4 |
Machen Sie sich mit der Benutzung von Strings (Zeichenketten) in C vertraut, siehe Abschnitt Zeichenketten, const.
/** @file ex059.c Beispielprogramm fuer String-Kopieren und Verketten.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#include <stdio.h>
#include <string.h>
/** Ziel-Puffer.
*/
char buf[50];
/** Erster in den Zielpuffer zu kopierender String.
*/
const char str1[] = { "Heute ist " };
/** Zweiter, an den ersten String im Zielpuffer anzuhaengender String.
*/
const char str2[] = { "Donnerstag." };
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
???
printf("%s\n", buf);
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Im Beispielprogramm ex059 soll der Text aus str1 in den Puffer buf kopiert werden, anschließend soll der Text aus str2 an den Text im Puffer buf angehangen werden. Der Text in Puffer buf soll ausgegeben werden.
Nehmen Sie die erforderlichen Korrekturen an ex059.c vor, erstellen und testen Sie das Programm ex059.
/** @file ex060.c Beispielprogramm fuer Zeichen-Suche.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <string.h>
/** Text, der das zu suchende Zeichen enthaelt.
*/
const char str1[] = { "Ein neuer Anfang ist gemacht." };
/** Das zu suchende Zeichen.
*/
const char zeichen = 'A';
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
char *res = NULL;
res = ???;
if(res) {
printf(
"Zeichen %c gefunden, Zeichenkette ab Zeichen: \"%s\"\n",
zeichen, res
);
}
else {
printf("Das Zeichen wurde nicht gefunden.\n");
}
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Im Beispielprogramm ex060 soll im Text str1 nach dem Buchstaben 'A' gesucht werden. Wird der Buchstabe 'A' gefunden, soll der Text ab dem 'A' ausgegeben werden.
Nehmen Sie die erforderlichen Korrekturen an ex060.c vor, erstellen und testen Sie das Programm ex060.
/** @file ex061.c Beispielprogramm fuer Zeichenketten-Vergleich.
Muss mit den Modulen he-read.c und he-strch.c gelinkt werden.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <string.h>
#include "he-read.h"
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
char str1[128]; /* Erster gelesener String */
char str2[128]; /* Zweiter gelesener String */
char buf[128]; /* Temporaerer Puffer */
int res; /* Ergebnis von strcmp */
if(hsm_et_read_string("Erstes Wort: ", str1, buf, sizeof(str1))) {
if(hsm_et_read_string("Zweites Wort: ", str2, buf, sizeof(str2))) {
res = strcmp(???);
if(res ???) {
printf("%s,%s\n", str1, str2);
}
else {
printf("%s,%s\n", str2, str1);
}
}
}
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Im Beispielprogramm ex061 sollen nacheinander zwei Textzeilen, die jeweils ein Wort enthalten, eingelesen und mit der Funktion strcmp() verglichen werden. Die beiden Wörter sollen in der lexikographisch richtigen Reihenfolge ausgegeben werden.
Nehmen Sie die erforderlichen Korrekturen an ex061.c vor,
erstellen und testen Sie das Programm ex061.
Hinweis: Es werden weitere Quelltextmodule "he-read.c" und
"he-strch.c" benötigt, diese müssen in das Projekt mit eingebunden
werden.
Damit die Include-Dateien gefunden werden, muss C:\Temp\C mit in
den Include-Pfad aufgenommen werden, siehe Screenshots im Abschnitt
Praktische Hinweise
→ Neues Projekt anlegen → Weitere Einstellungen
(Include-Pfad).
/** @file ex062.c Beispielprogramm fuer Kopieren und Bearbeiten von Strings.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/** Original-Text.
*/
char const orig_text[] = { "Umwandeln von GROSSBUCHSTABEN in kleine." };
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
char buf[128]; /* Puffer fuer Kopieren und Bearbeitung */
/* Original-Text in Puffer kopieren */
if(sizeof(buf) > strlen(orig_text)) {
strcpy(buf, orig_text);
/* Ausgabe Original-Text */
printf("Original-Text: \"%s\"\n", buf);
/* Umwandeln in Kleinbuchstaben und Ausgabe */
???
printf("Kleinbuchstaben: \"%s\"\n", buf);
/* Umwandeln in Grossbuchstaben und Ausgabe */
???
printf("Grossbuchstaben: \"%s\"\n", buf);
}
else {
printf("FEHLER: Ziel-Puffer zu klein!\n");
}
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Im Programm ex062 soll der Text orig_text in den Puffer
buf kopiert und dort bearbeitet werden.
Zunächst sollen alle Buchstaben in Kleinbuchstaben umgewandelt
werden.
Anschließend sollen alle Buchstaben in Großbuchstaben umgewandelt
werden.
Nach jeder Umwandlung soll der Text ausgegeben werden.
Nehmen Sie die erforderlichen Korrekturen an ex062.c vor, erstellen und testen Sie das Programm ex062.
/** @file ex063.c Beispielprogramm fuer String-Kopieren mit Limit.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#include <stdio.h>
#include <string.h>
/** Definition eines Zeigers auf ein konstantes Wort. */
typedef char const * PCHAR;
/** Puffer, in den die Wortanfaenge kopiert werden. */
char feld[6];
/** Original-Woerter. */
char const * const woerter[] = {
"Eisentor",
"Besenstiel",
"Faustkeil",
"Lichtschalter"
};
/** Anzahl der Elemente im Feld woerter. */
static size_t const sz_woerter = sizeof(woerter)/sizeof(PCHAR);
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
size_t i; /* Index des aktuellen Wortes */
for(i = 0; i < sz_woerter; i++) {
/* Wort i in feld kopieren, dabei kuerzen. Funktion strncpy() nutzen. */
???
/* Sicherstellen, dass String in feld mit Nullbyte abgeschlossen ist. */
???
/* Inhalt von feld ausgeben */
printf("Eintrag %u: \"%s\"\n", (unsigned)i, ???);
}
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Im Programm ex063 sollen mehrere Textworte aus dem Feld
woerter nacheinander in den Puffer feld kopiert
werden. Dabei ist zu beachten, dass feld nur 6 Elemente
hat.
Verwenden Sie zum Kopieren die Funktion strncpy(). Denken
Sie daran, dass das letzte Element von feld ein Nullbyte
sein muss.
Nehmen Sie die erforderlichen Korrekturen an ex063.c vor, erstellen und testen Sie das Programm ex063.