Как реализовать функцию в C#, которая возвращает немедленный текстовый символ заданного символа текста. Символы должны быть в алфавитном порядке. Пример: с учетом символа «C» метод должен вернуть символ «D».Метод в C# для возврата символа немедленного текста заданного символа
ответ
Я думаю, что я нашел решение:
public static string GetNextLetter(string letter = null)
{
if (IsStringNullOrEmpty(letter))
return "A";
char lastLetter = letter.Last();
if (lastLetter.ToString() == "Z")
return GetNextLetter(RemoveLastCharacter(letter)) + "A";
else
return RemoveLastCharacter(letter) + (char)(lastLetter + 1);
}
Все лучше решения приветствуются.
Это, похоже, не обрабатывает нижний регистр «z». Также вы можете просто сравнить 'lastLetter' без' ToString', как 'lastLetter == 'Z''. Также не уверен, что такое «RemoveLastCharacter», но «letter.Remove (letter.Length - 1);' будет возвращать строку с удаленным последним символом. – juharr
Функция RemoveLastCharacter выполняет то же самое, что и {letter.Remove (letter.Length - 1)}. Поскольку мне нужны только верхние буквы, я буду использовать функцию str.ToUpper(), чтобы гарантировать, что я всегда получаю результат с верхними буквами. – miguelbgouveia
char c = 'C';
char i = (char)(c + 1);
System.Diagnostics.Debug.WriteLine(i);
Он выведет 'D' в окно вывода отладки.
Вот метод, который должен делать то, что вы хотите. Тем не менее, проверка не для альфа-символов.
public static string ToNextAlpha(string str)
{
if (str == null)
{
throw new ArgumentNullException("str");
// Or you can just return "a";
}
var end = new StringBuilder();
for (int index = str.Length - 1; index >= 0; index--)
{
char c = str[index];
bool isZed = c == 'z' || c == 'Z';
c = (char)(isZed ? c - 25 : c + 1);
end.Insert(0, c);
if (!isZed)
{
return str.Substring(0, index) + end;
}
}
return "a" + end;
}
Примечание: Это превратит "ZZ" в "ааа" и "ZZ" в "AAA". Если вы хотите добавить верхний регистр «А», просто измените последнюю строку на любую логику, в которой вы нуждаетесь.
Ваша функция работает нормально. Возможно, моя функция более элегантная, потому что она рекурсивна. – miguelbgouveia
Что он должен вернуть при передаче 'z';) –
У меня уже есть функция, которая использует фиксированный массив, содержащий все буквы. Но я думаю, что это не лучшее решение проблемы. – miguelbgouveia
, когда мы проходим z, предположим, вернем «аа». Передача «aa» retunr «ab» ... – miguelbgouveia