Ich habe gerade an einer Prüfung teilgenommen, in der ich Folgendes gefragt wurde:
Schreiben Sie den Funktionskörper jeder der Methoden GenStrLen, InsertChar und StrReverse für den unten angegebenen Code. Dabei müssen Sie Folgendes berücksichtigen;
- Wie Strings in C++ aufgebaut sind
- Die Zeichenkette darf nicht überlaufen
- Einfügen eines Zeichens erhöht dessen Länge um 1
- Eine leere Zeichenkette wird durch StrLen = 0 angezeigt.
class Strings {
private:
char str[80];
int StrLen;
public:
// Constructor
Strings() {
StrLen=0;
};
// A function for returning the length of the string 'str'
int GetStrLen(void) {
};
// A function to inser a character 'ch' at the end of the string 'str'
void InsertChar(char ch) {
};
// A function to reverse the content of the string 'str'
void StrReverse(void) {
};
};
Die Antwort, die ich gab, lautete in etwa wie folgt (siehe unten). Mein eines Problem ist, dass viele zusätzliche Variablen verwendet und das macht mich glauben, dass ich nicht tun es die bestmögliche Art und Weise, und die andere Sache ist, dass nicht funktioniert....
class Strings {
private:
char str[80];
int StrLen;
int index; // *** Had to add this ***
public:
Strings(){
StrLen=0;
}
int GetStrLen(void){
for (int i=0 ; str[i]!='\0' ; i++)
index++;
return index; // *** Here am getting a weird value, something like 1829584505306 ***
}
void InsertChar(char ch){
str[index] = ch; // *** Not sure if this is correct cuz I was not given int index ***
}
void StrRevrse(void){
GetStrLen();
char revStr[index+1];
for (int i=0 ; str[i]!='\0' ; i++){
for (int r=index ; r>0 ; r--)
revStr[r] = str[i];
}
}
};
Ich wäre dankbar, wenn mir jemand grob erklären könnte, wie die Frage am besten zu beantworten ist und warum. Wie kommt es außerdem, dass mein Professor jede Klassenfunktion mit " }; " abschließt, ich dachte, das würde nur für das Ende von Klassen und Konstruktoren verwendet.
Herzlichen Dank für Ihre Hilfe.