Grupowanie znaków ze stringa do tablicy

Grupowanie znaków ze stringa do tablicy
M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Witam,potrzebuje pomocy w rozbiciu ciągu znaków ze stringa który posiada ponad 800 znaków do tablicy po 4 znaki .Jest ni to potrzebne w ulepszeniu swojego małego programiku który ułatwia mi prace.Za wszystkie podpowiedzi z góry dziękuje

TU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
1

String to łańcuch znaków więc proponuję zrobić zwykłą pętle for, gdzie zwiększasz iteracje co 4, a w środku odnosisz się do string[i], string[i+1], string[i+2], string[i+3].

DF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 35
2

Witam,
Jestem totalnym laikiem, namazałem coś takiego.
Zakładając, że na ostatniej pozycji może być string o długości mniejszej niż 4:

Kopiuj
string arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf";

            

            string[] tab = new string[(arg.Length % 4 == 0) ? arg.Length/4 : arg.Length/4 + 1];

            for (int i = 0; i < tab.Length; i++)
            {
                if (arg.Length > 4)
                {
                    tab[i] = arg.Substring(0, 4);
                    arg = arg.Remove(0, 4);
                }    
                else
                {
                    tab[i] = arg.Substring(0, arg.Length);
                    arg = arg.Remove(0, arg.Length);
                }
            }
SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1596
1
Kopiuj
string[] Split(string str, int chunkSize)
        {
            return Enumerable.Range(0, str.Length / chunkSize)
                .Select(i => str.Substring(i * chunkSize, chunkSize)).ToArray();
        }
M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0
dlaFrajdy napisał(a):

Witam,
Jestem totalnym laikiem, namazałem coś takiego.
Zakładając, że na ostatniej pozycji może być string o długości mniejszej niż 4:

Kopiuj
string arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf";

            

            string[] tab = new string[(arg.Length % 4 == 0) ? arg.Length/4 : arg.Length/4 + 1];

            for (int i = 0; i < tab.Length; i++)
            {
                if (arg.Length > 4)
                {
                    tab[i] = arg.Substring(0, 4);
                    arg = arg.Remove(0, 4);
                }    
                else
                {
                    tab[i] = arg.Substring(0, arg.Length);
                    arg = arg.Remove(0, arg.Length);
                }
            }

DZIAŁA,zawsze mamy po 4 ,ale dzięki za zrobienie ,jeśli by było inaczej,może to wykorzystam gdzie indziej DZIĘKUJE!

M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0
szydlak napisał(a):
Kopiuj
string[] Split(string str, int chunkSize)
        {
            return Enumerable.Range(0, str.Length / chunkSize)
                .Select(i => str.Substring(i * chunkSize, chunkSize)).ToArray();
        }

Ta solucja na pewno też działa tyle ze mój skill nie potrafi jej zastosować ,ja nie jestem żadnym programistą tylko zwykłym mechanikiem samochodowym , ten mój mini programik pomaga mi pracy nad sterownikami sinika , że dwa razy już zapłaciłem za zrobienie takiego mini programu a dostałem dwa zupełnie nie działające gnioty,więc zabrałem się za robotę sam posiłkując się wami i tym forum.
DZIĘKUJE!
Czy kolego szydlak możesz mi to wyjaśnić jak to ma działać gdy string jest w zmiennej np arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf"; ???
Jeszcze raz dziękuje wam wszystkim

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1596
0

No wywołujesz metodę: var twojaNowatablica = Split(arg , 4);

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 422
0

Oto moje propozycje rozwiązania za pomocą wyrażeń LINQ. Zamiast stałej wartości 4 możesz użyć zmiennej, której wartość musi być większa niż 0.

  1. Mało elegancki zapis, ale bez ponownego wykorzystania wejściowego ciągu znaków wewnątrz wyrażenia.
Kopiuj
var output = input.Select((c, i) => (c, i))
    .GroupBy(x => x.Item2 / 4)
    .Select(x => new string(x.Select(y => y.Item1).ToArray()));
  1. Wyrażenie podobne do jednego z wcześniej zaproponowanych w tym wątku. Użycie Math.Min zapobiega wyrzuceniu wyjątku w przypadku, gdy długość wejściowego ciągu znaków nie jest wielokrotnością 4.
Kopiuj
var output = input.Where((c, i) => i % 4 == 0)
    .Select((c, i) => input.Substring(4 * i, Math.Min(4, input.Length - 4 * i)));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.