So habe ich eine Zeichenfolge als einen Satz definiert mit seinen Leerzeichen durch "*" ersetzt. Zum Beispiel:Suchen eines Wortes in einer Zeichenfolge, die nur die Bibliotheken Iostream und Cstring verwendet
suffix*i*am*using*stackoverflow*text1suffix*text2suffix
Das erste Wort des Satzes ist das 'Suffix'. Was ich tun muss, ist, den Satz in verschiedene Wörter mit strtok zu trennen und dann jedes Wort zu drucken, das in dem Suffix endet. Der Ausgang wäre die folgende:
text1suffix, text2suffix
Der schwierige Teil ist, dass ich dies durch die Verwendung Bibliotheken nur tun müssen, Iostream und cstring.
Dies ist mein Code:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[256], t[256], *p, l, ok;
strcpy(s, "suffix*i*am*using*stackoverflow*text1suffix*text2suffix");
p = strtok(s, "*");
strcpy(t, p);
l = strlen(p);
p = strtok(NULL, "*");
while(p) {
ok = 1;
for(int i = strlen(p)-1; i >= 0; i--) {
if(l-(strlen(p)-i) > 0) {} else break;
if(p[i] == t[l-(strlen(p)-i)]) { }
else { ok = 0; break; }
}
if(ok == 1) cout << "*" << p;
p = strtok(NULL, "*");
}
return 0;
}
Was ich tat, ist jedes einzelne Zeichen überprüfen (vom letzten Start) und prüfen, ob sie die gleichen wie in dem ersten Wort sind.
Die Frage ist: Gibt es irgendeine Möglichkeit, die ich mit weniger Aufwand tun könnte? Oder gibt es eine andere Möglichkeit, dieses Problem zu lösen? Ich habe das Gefühl, dass meine Methode nicht gut ist.
'strcmp' könnte hilfreich sein – tkausl
Können Sie mir bitte ein Beispiel geben? – Radu
[hier ist es] (http://en.cppreference.com/w/c/string/byte/strcmp) –