Statische Einträge von Klassen
Wenn eine Information für alle Exemplarer einer Klasse gleich ist, dann braucht sie nicht mit jedem Exemplar verbunden werden, sondern nur einmal in der Klasse abgelegt zu werden. Solche Einträge einer Klasse werden auch als „statische“ Einträge der Klasse bezeichnet. Es gibt unter anderem statische Einträge für Typen und für Werte.
Typnamen
»::std::string::size_type« ist ein numerischer Typ, der in vielen Fällen wie der Typ »int« verwendet werden kann. Es ist nur Vorsicht geboten, falls er in Zusammenhang mit negativen Werten verwendet wird. »const« nach der eingeklammerten Parameterliste bedeutet, daß die Ausführung dieser Elementfunktion den Text nicht verändert.
Die Klasse »::std::string« definiert einige Namen für Typen: »::std::string::value_type« ist der Typ eines einzelnen Zeichens (eines Ausdrucks der Klasse »::std::string«), und »::std::string::size_type« ist der Typ der Anzahl der Zeichen (eines Ausdrucks der Klasse »::std::string«) (dies ist also ein numerischer Typ).
- Dokumentation nach n3797, 21.4
namespace std
{ class string
{ typedef … value_type;
typedef … size_type; }}
Das folgende Programm zeigt, wie die Länge einer Zeichenfolge angegeben werden kann. Dabei ist es egal, ob die Elementfunktion »size()« oder die Elementfunktion »length()« verwendet wird.
main.cpp
#include <iostream> /* ::std::cout */
#include <ostream> /* << */
#include <string> /* ::std::string */int main()
{ ::std::string s{ "alpha" };
::std::cout << s.size() << "\n";
::std::cout << s.length() << "\n";::std::string::value_type ch = s.at( 1 );
::std::string::size_type zz = s.size();
int zi = zz;
::std::cout << ch << "\n";
::std::cout << zz << "\n";
::std::cout << zi << "\n"; }::std::cout
5
5- nach n3797, 21.4.4 (vereinfacht)
- ::std::string::size_type size() const;
Ergibt: Anzahl der char-Objekte der Zeichenfolge. - ::std::string::size_type length() const;
Ergibt: size().
Fundamentale Werte
::std::string::npos
beta.find( 'x' )
Übungsaufgaben
Beispielaufgabe: Schreiben Sie eine Anweisung, welche das ::std::string-Exemplar »s« ausgibt.
Beispiellösung: ::std::cout << s;
Für die folgenden Aufgaben soll die Include-Direktive »#include <algorithm>« möglichst noch nicht verwendet werden, da diese erst später vorgestellt werden wird. Statt dessen sollen die bis hier schon im Kurs vorgestellten Möglichkeiten bevorzugt verwendet werden.
Übungsaufgabe
Schreiben Sie eine möglichst kurze bool-Funktion »is_vowel«, welche genau dann »true« zurückgibt, wenn das Schriftzeichen in ihrem char-Argument ein kleiner Vokalbuchstabe (eines der Zeichen »a«, »e«, »i«, »o« oder »u«) ist.
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
...
int main()
{ ::std::cout <<
is_vowel( 'a' )&&
!is_vowel( 'b' )&&
!is_vowel( 'c' )&&
!is_vowel( 'd' )&&
!is_vowel( 'e' )&&
!is_vowel( 'f' )&&
!is_vowel( 'g' )&&
!is_vowel( 'h' )&&
is_vowel( 'i' )&&
!is_vowel( 'j' )&&
!is_vowel( 'k' )&&
!is_vowel( 'l' )&&
!is_vowel( 'm' )&&
!is_vowel( 'n' )&&
is_vowel( 'o' )&&
!is_vowel( 'p' )&&
!is_vowel( 'q' )&&
!is_vowel( 'r' )&&
!is_vowel( 's' )&&
!is_vowel( 't' )&&
is_vowel( 'u' )&&
!is_vowel( 'v' )&&
!is_vowel( 'w' )&&
!is_vowel( 'x' )&&
!is_vowel( 'y' )&&
!is_vowel( 'z' )
<< '\n'; }
Übungsaufgabe
Schreiben Sie eine Anweisung, welche die einzelnen Schriftzeichen des ::std::string-Exemplars »s« (»s« ist hier ein Variablenname) in umgekehrter Reihenfolge ausgibt.
Übungsaufgabe
Schreiben Sie eine Anweisung, welche das erste und das letzte Wort des ::std::string-Exemplars »s« (»s« ist hier ein Variablenname) ausgibt. (Falls der Text kein Wort enthält, soll auch nichts ausgegeben werden.)
Übungsaufgabe
Schreiben Sie eine Anweisung, welche ausgibt, wie oft das Zeichen »a« in dem ::std::string-Exemplar »s« (»s« ist hier ein Variablenname) vorkommt.