Danke für die Antworten. Habe mein Programm entsprechend geändert.
|
Quellcode
|
1
2
3
|
// Prüfen ob Ende von String1 gleich dem Ende von String 2 ist
if(*(it1 - 1) == *(it2 - 1))
return true; // wenn ja, true zurückgeben
|
Jetzt funktioniert es.
Edit:
Muss bei dem was dot geschrieben hat nochmal einhaken. Es geht um den Fall wenn der String leer ist. Hier mal die Kurzversion meines Programms.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <iostream>
#include <string>
bool solution(std::string const &str, std::string const &ending) {
if (ending.length() == 0)
// was ist hier zu tun?
if(str.back() == ending.back())
return true;
return false;
}
|
Was mach ich nun wenn String2 leer ist?
Habe hier noch einen (fremden) Codeausschnitt von dem ich weiß, dass er die richtige Lösung liefert.
|
Quellcode
|
1
2
3
4
5
|
#include <string>
bool solution(const std::string& str, const std::string& ending) {
return str.size() >= ending.size() && str.compare(str.size() - ending.size(), std::string::npos, ending) == 0;
}
|
Und hier nochmal die (englische) Aufgabenstellung:
Complete the solution so that it returns true if the first argument(string) passed in ends with the 2nd argument (also a string).
Examples:
solution('abc', 'bc') // returns true
solution('abc', 'd') // returns false
solution("abc", "") // returns true
Was bei einem leeren String passieren soll wird mir dabei aber nicht ersichtlich. Allerdings verstehe ich beim nochmaligen lesen die Aufgabe so das ALLE zeichen des zweiten stringe mit den letzten zeichen des ersten strings verglichen werden sollen. Und wenn der zweite String leer ist müsste es auch true zurückgeben da ja beide mit der Escape-Sequenz enden. Nur wie setze ich das um?
Edit 2:
Habe jetzt endlich eine Lösung gefunden. Das Programm vergleicht jetzt ALLE Zeichen des letzten string mit den letzten Zeichen des ersten string. (also z.B str1"abcd", str2 "bcd" --> true oder str1"abcd", str2"dcd" --> false)
Bei diesem Programm habe ich einfach die enden der strings mit str.back() verglichen und dann die letzten Elemnte mit str.pop_back() gelöscht um dann wieder mit str.back() zu prüfen. Das ganze geht so lange bis alle zeichen weggelöscht wurden (return true) oder er auf einen falschen buchstaben trifft (return false). Bei einem leeren string habe ich einfach true zurückgegeben da ja beide strings mit der Escape-Sequenz enden.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
bool solution(std::string *str1, std::string *str2) {
bool isItTrue = false;
if (str2->length() == 0)
return true;
for (int i= str2->length(); i > 0; i--)
{
if (str1->back() == str2->back())
{
isItTrue = true;
str1->pop_back();
str2->pop_back();
}
else
{
isItTrue = false;
break; // jumps out of the for-loop
}
}
return isItTrue;
}
|