strcmp () и подписанные / неподписанные символы

Здесь у вас есть ленивая оцененная версия этого алгоритма, закодированная в C #:

    static bool nextCombination(int[] num, int n, int k)
    {
        bool finished, changed;

        changed = finished = false;

        if (k > 0)
        {
            for (int i = k - 1; !finished && !changed; i--)
            {
                if (num[i] < (n - 1) - (k - 1) + i)
                {
                    num[i]++;
                    if (i < k - 1)
                    {
                        for (int j = i + 1; j < k; j++)
                        {
                            num[j] = num[j - 1] + 1;
                        }
                    }
                    changed = true;
                }
                finished = (i == 0);
            }
        }

        return changed;
    }

    static IEnumerable Combinations<T>(IEnumerable<T> elements, int k)
    {
        T[] elem = elements.ToArray();
        int size = elem.Length;

        if (k <= size)
        {
            int[] numbers = new int[k];
            for (int i = 0; i < k; i++)
            {
                numbers[i] = i;
            }

            do
            {
                yield return numbers.Select(n => elem[n]);
            }
            while (nextCombination(numbers, size, k));
        }
    }

И тестовая часть:

    static void Main(string[] args)
    {
        int k = 3;
        var t = new[] { "dog", "cat", "mouse", "zebra"};

        foreach (IEnumerable<string> i in Combinations(t, k))
        {
            Console.WriteLine(string.Join(",", i));
        }
    }

Надеюсь, это поможет вам!

16
задан DevSolar 31 August 2009 в 10:05
поделиться

1 ответ

7.21.4 / 1 (C99), выделено мной:

Знак ненулевого значения, возвращаемого функциями сравнения memcmp, strcmp, а strncmp определяется знаком разницы значений первых пара символов ( оба интерпретируются как unsigned char ), которые различаются объектами по сравнению.

В C90 есть нечто подобное.

Обратите внимание, что strcoll () может быть более адаптирован, чем strcmp (), особенно если у вас есть символы вне базового набора символов.

28
ответ дан 30 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: