Grupowanie znaków ze stringa do tablicy

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

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

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:

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);
                }
            }
1
string[] Split(string str, int chunkSize)
        {
            return Enumerable.Range(0, str.Length / chunkSize)
                .Select(i => str.Substring(i * chunkSize, chunkSize)).ToArray();
        }
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:

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!

0
szydlak napisał(a):
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

0

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

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.
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.
var output = input.Where((c, i) => i % 4 == 0)
    .Select((c, i) => input.Substring(4 * i, Math.Min(4, input.Length - 4 * i)));

1 użytkowników online, w tym zalogowanych: 0, gości: 1