Teilstrings suchen

Gast #2009712
Lesenswert?

Der Text wird nach dem Suchstring durchsucht,
das letzte Vorkommen des Suchstrings im Text wird einschließlich einer 
links- und rechtsseitigen Umgebung von je (bis zu) fünf Zeichen 
ausgegeben; falls der Suchstring nicht im Text vorkommt,
soll "Nichts gefunden." ausgegeben werden.


Eingabe Text: "Ich habe Probleme mit Strings."
Suchstring: "in"
Ergebnis: "t Strings."






Hat jemand einen Gedankenspruch für uns, da wir nicht weiterwissen.

No comments like do your homework on your on pls!
Persönliche Seite #2009726
Lesenswert?

Diese Hausaufgabe ist doch recht einfach zu lösen.

Das Problem ist in zwei Schritte zu zerteilen:

1. Suchen des angegebenen Strings.

2. Ausgabe der "Umgebung" des Treffers.

Dabei ist die Position des Treffers aus 1. im Gesamtstring und die Länge 
des Gesamtstrings zu berücksichtigen.

Im Beispiel liegt der Treffer sehr dicht am Ende des Gesamtstrings, so 
daß nur noch weniger als 5 Zeichen davon ausgegeben werden können (denn 
wo nichts ist, ist nichts).
Gast #2009746
Lesenswert?

Heinrich Schmidt schrieb:
> Hat jemand einen Gedankenspruch für uns, da wir nicht weiterwissen.
Kauf dir 'nen C-Buch, oder was ist ein Gedankenspruch?

Ansonsten ein paar Stichworte:
strtok()
Zeiger
memcpy()
oder
irgendeine Suchmaschine "string teilen" oder ähnliche Suchworte

Heinrich Schmidt schrieb:
> No comments like do your homework on your on pls!
Warum auch, wenn ich Gedankenspruch richtig interpretiere, braucht 
ihre Denkanstöße, da oben stehen vier. Plus Rufus' Beitrag.

Heinrich Schmidt schrieb:
> Nein die Fragestellung lautet ja ;-)
> der letzte Teilstring...
>
> Bsp:
> "Warum ist so ein schlechtes Wetter heute puhh!"
> suchstring = "eu"
> Ausgabe =     "ter heute pu"
Passt gar nicht, oder?

Bsp:
"Warum ist so ein schlechtes Wetter heute puhh!"
suchstring = "te"
Ausgabe =     "r heute pu"
und
Ausgabe =     "s Wetter heute pu"
wäre falsch.
#2009774
Lesenswert?

Heinrich Schmidt schrieb:

> Hat jemand einen Gedankenspruch für uns, da wir nicht weiterwissen.

Ja:
erledige es in 2 Teilschritten wie schon angedeutet.

Der erste Teilschritt ist trivial: Den Teilstring suchen.

Von optimal ist ja nicht die Rede, daher: ihr könnt das so einfach 
machen wie ihr wollt. Wie machst du es denn von Hand? Du fängst links, 
beim ersten Zeichen an und siehst nach, ob hier ein entsprechender 
Teilstring vorhanden ist. Wenn ja merkst du dir die Position. Dann 
probierst du beim 2.ten Zeichen, dann beim 3.ten etc. etc.

Die AUfgabe dürfte bewusst so gestellt sein, dass man sein Wissen über C 
Strings unter Beweis stellt und man mit den Standard-C str... Funktionen 
nicht sehr weit kommt. Zumindest gibt es keine Standard Funktion, die 
alles in einem Aufwasch erledigt, sondern man muss kombinieren. Aber 
genau darum gehts ja schliesslich in der Programmierung.
Gast #2009782
Lesenswert?

Ja das hatten wir bemerkt
> Die AUfgabe dürfte bewusst so gestellt sein, dass man sein Wissen über C
> Strings unter Beweis stellt und man mit den Standard-C str... Funktionen
> nicht sehr weit kommt.

wir dachten jedoch daran von hinten anzufangen zu zählen und den 
suchstring zu drehen ...
#2009835
Lesenswert?

Jörg Wunsch schrieb:
> Ach, hat GCC neuerdings auch ein Perl-Frontend? :-)

Ups. das GCC-Forum hatte ich übersehen.

also:
1
#include <iostream>
2
#include <string>
3

4
int main() {
5
  std::string eingabe="Warum ist so ein schlechtes Wetter heute puhh!";
6
  std::string such="te";
7
  std::string::size_type p=eingabe.rfind(such);
8
  if (p != std::string::npos) {
9
    std::string::size_type start=p>5?p-5:0;
10
    std::string::size_type len=p-start+such.length()+5;
11

12
    std::cout << eingabe.substr(start,len) << std::endl;
13
  } else {
14
    std::cout << "Nicht gefunden" << std::endl;
15
  }
16
  return 0;
17
}

C++ sollte ja in Ordnung sein, ist Teil vom GCC und nirgendwo steht was 
abweichendes ;)
#2010288
Lesenswert?

1
import std.stdio;
2
import std.string;
3

4
void main(char[][])
5
{
6
    int[2] offset = [-5, 5];
7
    char[] eingabe = "Warum ist so ein schlechtes Wetter heute puhh!";
8
    int index = find(eingabe, "in");
9
    writefln("Found at %d\n\t%s", index, eingabe[index + offset[0]..index + offset[1]]);
10
}
D 1.0 mit 'phobos' sieht C da noch recht ähnlich...
(Hab's allerdings nicht mit dem GDC getestet)

scnr, Jörg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren