Hilfe bei Sortierung und Zechenfolge

Thaelisin

Mitglied
Vielen Dank, ja ich glaube schon. Am Anfang hatte ich nur ein eindimensionales Feld, was ja aber nicht ausreicht da ich ja hier auch die Länge angeben muss. Also musste ich ein zweidimensionales Feld anlegen.

Ich habe mal gegoogelt was es mit dem size_t auf sich hat aber das verstehe ich nicht so wirklich. Könntest du mir das vll kurz erläutern?

Ich glaube jetzt fehlt mir nur noch die Sortierung und die Groß und Kleinschreibung.

C++:
#include <iomanip>
#include <iostream>

using namespace std;

void main(void)

{
   
    int  anzahl,i = 0;
    char Vornamen[100][10];
    char Nachnamen[100][10];
    char Matrikelnummern[100][10];

    cout << "Bitte geben sie die Anzahl der anzulegenden Daten fest: " << endl;
    cin >> anzahl;

    for ( i = 0; i < anzahl; i++)
    {
        cout << "Geben sie die Vornamen ein: " << endl;
        cin >> Vornamen[i];
        cout << "Geben sie die Nachnamen ein: " << endl;
        cin >> Nachnamen[i];
        cout << "Geben sie die Matrikelnummern ein: " << endl;
        cin >> Matrikelnummern[i];
    }
    for (size_t i = 0; i < anzahl; i++)
    {
        cout << Vornamen[i];
        cout << Nachnamen[i];
        cout << Matrikelnummern[i];
    }

}
 

cwriter

Erfahrenes Mitglied
Ich habe mal gegoogelt was es mit dem size_t auf sich hat aber das verstehe ich nicht so wirklich. Könntest du mir das vll kurz erläutern?
Oh, das ist recht leicht erklärt:
In älterem Code gab es einige wenige Integer-Grundtypen: char, short, int, long, jeweils signed (implizit) oder unsigned.
Ursprünglich galt die Regel
char = byte
short = word (2 byte)
int = dword (double word, 2x2 = 4 byte)
long = qword (quad word, 4x2 = 8 byte)

Dummerweise hatte jede Firma und Organisation eine eigene Vorstellung davon. Mal war long dasselbe wie int (4 bytes), mal war char plötzlich 2 Byte breit, usw.
Der Standard setzt nur fest, welche Werte minimal reinpassen müssen, daher die Verwirrung.
Mittlerweile hat man die genaueren ints (z.B. int32_t, uint8_t) eingeführt, deren Zahl die Anzahl Bits repräsentiert, die sie haben.
Daneben hat man auch size_t spezifiziert: Ein Size type, der für alles mögliche verwendet wird:
Dateioperationen, Arbeitsspeicherindizierungen usw.
Die Anforderungen an size_t:
http://en.cppreference.com/w/c/types/size_t

In Kurzform: size_t muss gross genug sein, um jedes Element referenzieren zu können. Unter x86-64/amd64 (modernen Prozessoren) sind das 2^64 Elemente. size_t ist da also ein uint64_t. size_t ist unsigned, was auch mehr Sinn macht: Das -1te Element wird es nicht geben.

Long story short: Es ist der Plattformunabhängige Weg, Indizierungen vorzunehmen und zu loopen.

Ich glaube jetzt fehlt mir nur noch die Sortierung und die Groß und Kleinschreibung.
Das war keine Frage, oder?

Gruss
cwriter
 

Thaelisin

Mitglied
Super erklärt danke sehr!
Nein als ich es geschrieben habe war es noch keine Frage, jetzt schon. Also ich habe mich zunächst an der Groß- und Kleinschreibung versucht. Bekomme es auch hin ganze Wörter damit zu verändern. Aber wie kann man damit die ersten Buchstaben der eingegebenen Wörter groß und die folgenden klein schreiben?
 

cwriter

Erfahrenes Mitglied
Bekomme es auch hin ganze Wörter damit zu verändern. Aber wie kann man damit die ersten Buchstaben der eingegebenen Wörter groß und die folgenden klein schreiben?
C:
char meinText[16];
for(size_t i = 0; i < 16; i++)
{
    char& ref = meinText[i];
    if(ref == 0) break; //Nicht unbedingt nötig, aber kann ein bisschen optimieren.
    if(i == 0) ref = toupper(ref);
    else         ref = tolower(ref);
}
Falls du die &-Notation nicht kennst: Das ist eine Referenz. In diesem speziellen Code spare ich damit einfach das meinText[i], der Compiler (Optimizer) wird das wohl optimieren. Semantisch ist es dasselbe wie ein Pointer
C:
char* ref = &meinText[i];
allerdings kann man das Referenzieren und Dereferenzieren (zumindest syntaktisch) sparen. Hier wird das recht gut erklärt: https://de.wikipedia.org/wiki/Referenz_(Programmierung)

Gruss
cwriter
 

Thaelisin

Mitglied
Guten Morgen,
das verstehe ich leider gar nicht. Für was steht denn meinText[16]? Und was ist ref? if und else verstehe ich und auch wie das funtkioniert, aber wo muss ich die Schleife einbauen. Ist das eine Schleife in der letzten Schleife?
Viele Grüße
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied

Thaelisin

Mitglied
Hey, ja soweit bin ich mitgekommen. Muss ich jetzt ein neues Array anlegen, nein oder?
Wenn ich das richtig verstehe muss ich eine for schleife für Vorname und eine für Nachname anlegen ?

Edit: das hatte ich geschrieben bevor ich gesehen habe das schon eine Antwort da war, entschuldigt bitte.
 
Zuletzt bearbeitet:

Thaelisin

Mitglied
Ich habe jetzt mal ein wenig rum probiert, aber was bei mir passiert ist, dass ich nur beim ersten Vornamen alles groß schreibe?
Was mache ich denn da Grundlegend falsch?

C++:
#include <iomanip>
#include <iostream>

using namespace std;

void main(void)

{
  
    int  anzahl,i = 0,j=0 ;
    char Vornamen[100][10];
    char Nachnamen[100][10];
    char Matrikelnummern[100][10];

    cout << "Bitte geben sie die Anzahl der anzulegenden Daten fest: " << endl;
    cin >> anzahl;

    for ( i = 0; i < anzahl; i++)
    {
        cout << "Geben sie die Vornamen ein: " << endl;
        cin >> Vornamen[i];
        cout << "Geben sie die Nachnamen ein: " << endl;
        cin >> Nachnamen[i];
        cout << "Geben sie die Matrikelnummern ein: " << endl;
        cin >> Matrikelnummern[i];

      
    }

    for (size_t i = 0; i < 10; i++)
    {
        char& ref = Vornamen[i][j];
        if (i == 0) ref = toupper(ref);
        else ref = tolower(ref);
    }

    cout << anzahl<<endl;
    for (size_t i = 0; i < anzahl; i++)
    {
        cout << Vornamen[i]<<"\t";
        cout << Nachnamen[i]<<"\t";
        cout << Matrikelnummern[i] << "\t" << endl;;
    }

}