www.mikrocontroller.net

Forum: Compiler & IDEs Teilstrings suchen


Autor: Heinrich Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Heinrich Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein die Fragestellung lautet ja ;-)

der letzte Teilstring...


Bsp:

"Warum ist so ein schlechtes Wetter heute puhh!"

suchstring = "eu"

Ausgabe =     "ter heute pu"

Autor: ikarus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinrich Schmidt schrieb:
> No comments like do your homework on your on pls!

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinrich Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Ups. das GCC-Forum hatte ich übersehen.

also:
#include <iostream>
#include <string>

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

    std::cout << eingabe.substr(start,len) << std::endl;
  } else {
    std::cout << "Nicht gefunden" << std::endl;
  }
  return 0;
}

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

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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) :)

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
import std.stdio;
import std.string;

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

scnr, Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.