C# :: Aufgabe #371

4 Lösungen Lösungen öffentlich

Erstes einzelnes Zeichen in einem String

Anfänger - C# von JKooP - 06.03.2021 um 18:25 Uhr
Erstelle eine Methode/Funktion, mit der man den Index des ersten einzeln
vorkommenden Zeichens in einem String (Text) ermitteln kann.
Groß- und Kleinschreibung soll nicht unterschieden werden.

Hinweise:
String ist nullbasiert.
Wenn es keine Lösung gibt, soll -1 ausgegeben werden.

Beispiele:
trainyourprogrammer => 0 (t)
lovegenericlists => 1 (o)
lovelollorosso => 2 (v)
otto => -1

Viel Spaß

Lösungen:

vote_ok
von hollst (13980 Punkte) - 07.04.2021 um 18:57 Uhr
Quellcode ausblenden C#-Code
using static System.Console;

string[] test = new string[] { "trainyourprogrammer", "llovegenericlists", "lovelollorosso", "otto" };
for (var i = 0; i < test.Length; i++)
    WriteLine($"{test[i]} {test[i].Solution()}");
ReadKey();

static class Extension
{
    public static int Solution(this string ss)  {
        string s = ss.ToUpper();
        for (var i = 0; i < s.Length; i++) {
            bool bo_found = false;
            for (var j = i + 1; j < s.Length; j++)
                if (s[i] == s[j])
                    bo_found = true;
            if (!bo_found)
                for(var k = i - 1; k >= 0; k--)
                    if (s[i] == s[k])
                        bo_found = true;
            if (!bo_found)
                return i;
        }
        return -1;
    }
}
vote_ok
von JKooP (18090 Punkte) - 13.04.2021 um 18:44 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System.Linq;

System.Console.WriteLine(FirstUniqueChar("lovelollorosso"));

static int FirstUniqueChar(string s) => s.IndexOf(s.GroupBy(x => x).Select(x => new { key = x.Key, count = x.Count() })
    .Where(x => x.count == 1).Select(x => x.key).FirstOrDefault());
vote_ok
von JKooP (18090 Punkte) - 23.04.2021 um 09:03 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
System.Console.WriteLine(FirstUniqueChar("lovelollorosso"));

int FirstUniqueChar(string s)
{
    var a = new int[26];

    for (var i = 0; i < s.Length; i++)
        a[s[i] - 'a']++;

    for (var i = 0; i < s.Length; i++)
        if (a[s[i] - 'a'] == 1)
            return i;

    return -1;
}
vote_ok
von dson (640 Punkte) - 01.05.2021 um 18:11 Uhr
Quellcode ausblenden C#-Code
using System;

namespace erstes_einzelnes_char_in_string
{
    class Program
    {
        static void Main(string[] args)
        {
            string wort = "trainyourprogrammer";
            int zaehler = 0;
            int position = 0;

            foreach (var item in wort)
            {
                //Mittels diesen Werts wird die Position an welchem sich der Buchstabe befindet ermittelt
                //Zudem wird am ende mit ihm überprüft ob überheupt ein Wert nur einmal im String vorkommt.
                position++; 
                foreach (var item1 in wort)
                {
                    if (item == item1)
                    {
                        zaehler++;

                    }
                }

                if (zaehler <= 1)
                {
                    //Dadurch das ich den Wert Poition am Anfang erhöhe muss hier der Wert um 1 verringert werden.
                    Console.WriteLine("{0} => {1} ({2})", wort, position-1, item);               
                    break;
                }
                if (position == wort.Length)
                {
                    Console.WriteLine("{0} => {1} ", wort, -1);
                }
                zaehler = 0;
            }
        }
    }
}