Forum: Compiler & IDEs Teilstrings suchen


von Heinrich Schmidt (Gast)


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!

von Rufus Τ. F. (rufus) Benutzerseite


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).

von Heinrich Schmidt (Gast)


Lesenswert?

Nein die Fragestellung lautet ja ;-)

der letzte Teilstring...


Bsp:

"Warum ist so ein schlechtes Wetter heute puhh!"

suchstring = "eu"

Ausgabe =     "ter heute pu"

von ikarus (Gast)


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.

von Εrnst B. (ernst)


Lesenswert?

Heinrich Schmidt schrieb:
> No comments like do your homework on your on pls!

... like: ...
... on your own ...
... , please! ...
1
my $eingabe="Warum ist so ein schlechtes Wetter heute puhh!";
2
my $suchstring="eu";
3
if ($eingabe=~/(.{0,5}$suchstring.{0,5})/g) {
4
  print $1,"\n";
5
} else {
6
  print "Nicht gefunden\n";
7
}

von Karl H. (kbuchegg)


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.

von Heinrich Schmidt (Gast)


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 ...

von Karl H. (kbuchegg)


Lesenswert?

Heinrich Schmidt schrieb:
> 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 ...

clever.
Also: Haut rein!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Εrnst B✶ schrieb:
1
my $eingabe="Warum ist so ein schlechtes Wetter heute puhh!";
2
my $suchstring="eu";
3
if ($eingabe=~/(.{0,5}$suchstring.{0,5})/g) {
4
  print $1,"\n";
5
} else {
6
  print "Nicht gefunden\n";
7
}

Ach, hat GCC neuerdings auch ein Perl-Frontend? :-)

von Εrnst B. (ernst)


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 ;)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Εrnst B✶ schrieb:
> C++ sollte ja in Ordnung sein, ist Teil vom GCC und nirgendwo steht was
> abweichendes ;)

Jetzt fehlt noch eine Ada-Version des Programms (GNAT) :)

von Jörg G. (joergderxte)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.