Мне нужна помощь с функцией - PullRequest
0 голосов
/ 26 июня 2019

Так что я некоторое время пытался написать функцию на C # который получает массив слов (которые были разбиты до получения функцией из строки в массив слов).

Итак, я пытался создать функцию, которая проверяет, если кроме words[0] (words - это имя массива слов) во всем массиве, есть ли буква, которая отображается более 3 раз ( 3 - минимум).

Например, это предложение:

Почему llll ddd ssssssss !!!!!!!?

Потому что ни одна буква не существует более 3 раз в слове - такого слова не существует. база функции выглядит так:

public bool MultipleCheck(string[] words)
{

}

То, что я придумал так далеко ... есть ошибки, которые я знаю ... Я еще не исправил:

public bool AttachmentsCheck(string[] words)
{

    string currentWord;
    int wordCounter = 0;

    for (int i=0; i < words.Length; i++)
    {
        currentWord = words[i];
        for (int j = 0; j < currentWord.Length; j++)
        {
            char[] wordArr = currentWord.ToCharArray();
            for (int k=0; k < wordArr.Length; k++)
            {
                if (wordArr[k]==wordArr[wordArr.Length-k])
                {
                    wordCounter++;
                }
            }
        }
        if (wordCounter => 3)
        {
            return false;
        }
    }
    return true;
}

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Использование метода расширения для определения, содержит ли слово последовательность из n последовательных символов:

public static class StringExt {
    public static bool WordHasConsecutive(this string word, int n) {
        if (word.Length <= 1)
            return false;
        if (n < 2)
            return true;
        if (word.Length >= n) {
            var ch = word[0];
            var count = 1;
            for (int i = 1; i < word.Length; ++i) {
                if (word[i] == ch) {
                    if (++count == n)
                        return true;
                }
                else {
                    ch = word[i];
                    count = 1;
                }
            }
        }
        return false;
    }
}

Ответ очень прост, просто верните слова, которые имеют длину хотя бы 3:

var ans = words.Where(w => w.WordHasConsecutive(3));
0 голосов
/ 26 июня 2019

Надеюсь, это сработает

private static Tuple<bool, string> ValidateWord(string[] words)
{
    bool foundResult = false;
    List<string> all3CharWords = new List<string>();
    string wordWith3SameChar = string.Empty;

    foreach (var word in words)
    {
        var resultTuple = ValidateWord(word);
        if (resultTuple.Item1)
        {
            foundResult = true;
            all3CharWords.Add(resultTuple.Item2);
        }
    }

    if (foundResult)
    {
        wordWith3SameChar = String.Join(";", all3CharWords.ToArray());
    }

    return new Tuple<bool, string>(foundResult, wordWith3SameChar);
}


private static Tuple<bool, string> ValidateWord(string words)
{
    bool foundResult = false;
    string wordWith3SameChar = string.Empty;
    List<string> traversedChars = new List<string>();
    for(int i = 0; i < words.Length; i++)
    {
        if (!traversedChars.Contains(words[i].ToString()))
        {
            string tripleChar = $"{words[i]}{words[i]}{words[i]}";
            if (words.Contains(tripleChar))
            {
                foundResult = true;
                wordWith3SameChar = words;
                break;
            }
        }
    }

    return new Tuple<bool, string>(foundResult, wordWith3SameChar);
}

Позвонив, как показано ниже, вы получите ответ

var resultTuple = ValidateWord("Why llll ddd ssssssss".Split(' ').ToArray());
if (resultTuple.Item1)
{
    Console.WriteLine($"The following words have 3 similar charecters: " + resultTuple.Item2);
}
else
{
    Console.WriteLine("No words has consecutive 3 similar charecters.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...