C# Aufgabe mit Strings

damien

Enthusiast
Thread Starter
Mitglied seit
08.12.2003
Beiträge
3.955
Hat sich erledigt.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
du willst also wissen an welcher position sich das erste zeichen von String S1 im String S2 befindet?

wenn ja guck dir mal die Methode IndexOf() der String Klasse an
 
Das habe ich mir angeguckt. Wie packe ich das nun in eine Schleife oder so, sodass er den kompletten String vergleicht ?
 
Code:
private int any(String string1, String string2)
{
    return string1.IndexOf(string2[0]);
}

kenn jetzt nicht den genauen Rückgabewert der Methode IndexOf() wenn das Zeichen nicht gefunden wird aber könnte mir vorstellen das es -1 ist
musst mal testen.

Die Funktion IndexOf() durchläuft den kompletten String und vergleicht zeichen für Zeichen
wenn der Vergleicht wahr ist gibt er den Index des Zeichens zurück;
 
Zuletzt bearbeitet:
Hi,

so sieht mein Code im Moment aus, scheint aber nicht zu funktionieren:

Code:
using System;

namespace Testprojekt
{
    class Program
    {
        static void Main()
        {
            string s1 = Console.ReadLine();
            string s2 = Console.ReadLine();
            Console.Write(any(s1, s2));

        }

        public static int any(string s1, string s2)
        {
 
            for(int counter = 0; counter <= s1.Length; counter++)
            {
                counter++;
                return s1.IndexOf(s2[counter]);
                
            }
            return -1;
        }
    }
}
 
du brauchst den counter und die forschleife nicht. einfch nur s1.IndexOf(s2);

Wenn es natuerlich darum geht das ganze von hand zu realiseren, dann musst du anders vorgehen.

Dann gehst du s1 mit der schleife durch, erzeugt in jedem durchlauf einen "ausschnitt" aus s1 von counter bis (counter + s2.Lenght) und vergleichst diesen mit s2. Wenn das richtig ist, dann einfach counter zurueckwerfen, oder nach dem ende der for ein -1;

in etwa (pseudocode, kenne die c# lib nicht)
PHP:
function getAnt(s1, s2) 
{
for(int counter = 0; counter <= s1.Length; counter++) 
{
   range = s1.getRange(counter, (counter + s2.Lenght));
   if(range == s2) {
     return counter;  
  }
}
return -1;
wie die methoden heissen musst du natuerlich rausfinden
 
einen "ausschnitt" aus s1 von counter bis (counter + s2.Lenght)

Könntest du das näher erklären bitte ? Hab ich nicht so recht verstanden.

s1.IndexOf(s2); funktioniert leider nicht ;)
 
Teste das hier mal....

Code:
using System;

namespace Testprojekt
{
    class Program
    {
        static void Main()
        {
            string s1 = Console.ReadLine();
            string s2 = Console.ReadLine();
            for(int i=0; i<=s2.length();i++)
            {
                Console.Write(any(s1, s2[i]));
            }

        }

        public static int any(string s1, char s2)
        {
                return s1.IndexOf(s2);
        }
    }
}
 
irgendwie vermute ich, dass es nicht Sinn und Zweck der Aufgabe ist indexOf zu verwenden.
 
auch ohne IndexOf() wäre es kein Problem, nur macht das keinen Sinn es nicht zu benutzen.

z.B. wenn es ohne IndexOf() sein sollte
so, aber da kann man auch gleich IndexOf() benutzen.
Code:
public static int any(string s1, char s2)
{
   //return s1.IndexOf(s2);
   for(int i=0; i<=s1.Length(); i++)
   {
       if(s1.Index(i)==s2)
       {
          return i;
       }
   }
}
 
Zuletzt bearbeitet:
das funktioniert so aber nur wenn s2 nur ein zeichen lang ist.
 
Schau dir die Parameter der Methode an
dort steht

public static int any(string s1, char s2)

bedeutet er nimmt nur einzelne zeichen an

der Methodensaufruf würde dann so aussehen

any(string1, string2[0])

string2[0] bedeutet er übergibt das erste Zeichen von string2 übergibt
dieses Zeichen ist zum Datentyp Char.

wenn man nun den ganzen string2 durchlaufen will packt man das ganze in eine schleife und ersetzt die 0 durch eine Int Variable
 
ah, das char hab ich nicht gesehen. dann hast du natuerlich vollkommen recht
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh