@ReWire_92

Как определить из каких букв состоит слово?

Есть 5 строковых переменных, в них слова, допустим, "ЯРД", "ЛЕС", "БЕГ", "ЖУК", "ЛУГ". Нужно получить все буквы, которые встречаются в этих словах в массив. Т.е. заполнить его буквами Я,Р,Д,Л,Е,С,Б,Г,Ж,У,К. Как это можно сделать?
  • Вопрос задан
  • 413 просмотров
Решения вопроса 2
EreminD
@EreminD
Кое-что умею
  1. Объявляем список List
  2. В цикле для каждой переменной (строки)
    1. Объявляем еще один цикл (для каждого символа)
      1. Если в списке нет (!list.Contains(char)) символа, то list.Add(char)
  3. Перебрав все символы всех строк, приводим к массиву list.toArray()

а код сам напишешь)
Ответ написан
Комментировать
@ReWire_92 Автор вопроса
В общем, решил задачу так:

public string StringLine;
public List<string> foundChars;
string slovo1 = "ЯРД";
string slovo2 = "ЛЕС";
string slovo3 = "БЕГ";
string slovo4 = "ЖУК";
string slovo5 = "ЛУГ";

StringLine = slovo1+slovo2+slovo3+slovo4+slovo5;       // Собираем все слова в одну строчку(ЯРДЛЕСБЕГЖУКЛУГ)

Match found = Regex.Match (StringLine, "[А-Я,Ё]");       // Ищем в этой строке вхождения всех букв алфавита с помощью регулярных выражений
	while (found.Success) {                                          
		if (!foundChars.Contains (found.Value)) {       // т.к. регулярка выдаст и повторяющиеся буквы, добавляем в список лишь те, которых в нём еще нет.
			foundChars.Add (found.Value);
		}
		found = found.NextMatch();
	}


Всё, список foundChars заполнен буквами Я,Р,Д,Л,Е,С,Б,Г,Ж,У,К и дальше с ним уже можно делать всё, что нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ralaton121
Ты хочешь, чтобы за тебя решили всю задачу?

Когда просят помощи по части своей работы - это нормально.
Когда просят сделать всю задачу - это нехорошо. Ты не выучишься так.

Исправь вопрос - перефразируй с "мне вообще ничего не понятно" на "мне непонятно именно это".
Ответ написан
Комментировать
@Sumor
Если алфавит ограничен русскими буквами в одном регистре, без буквы ё, то можно предложить более быстрый и хитрый подсчёт, основанный на том, что в типе int - 32 бита и сопоставить каждой найденной букве свой бит.
Тогда достаточно быстро определяются буквы, участвующие в слове. (В коде 'А' - большая русская А).
// Подсчёт
var str = "ТОСТЕР";
var result = 0;
foreach(var ch in str)
{
    result |= (1 << ((int)ch - (int)'А'));
}

// Вывод результата
for(var i = 0; i < 32; i++)
{
    if((result & (1 << i)) == (1 << i))
        Console.WriteLine((char) ((int)'А' + i));
}
// Вывод:
// Е
// О
// Р
// С
// Т

Код можно переложить на латинские буквы, а также с небольшими переделками приспособить под алфавиты до 64 букв, используя Int64.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы