2015-03-10 2 views
0

Как реализовать функцию в C#, которая возвращает немедленный текстовый символ заданного символа текста. Символы должны быть в алфавитном порядке. Пример: с учетом символа «C» метод должен вернуть символ «D».Метод в C# для возврата символа немедленного текста заданного символа

+4

Что он должен вернуть при передаче 'z';) –

+0

У меня уже есть функция, которая использует фиксированный массив, содержащий все буквы. Но я думаю, что это не лучшее решение проблемы. – miguelbgouveia

+0

, когда мы проходим z, предположим, вернем «аа». Передача «aa» retunr «ab» ... – miguelbgouveia

ответ

0

Я думаю, что я нашел решение:

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); 
    } 

Все лучше решения приветствуются.

+0

Это, похоже, не обрабатывает нижний регистр «z». Также вы можете просто сравнить 'lastLetter' без' ToString', как 'lastLetter == 'Z''. Также не уверен, что такое «RemoveLastCharacter», но «letter.Remove (letter.Length - 1);' будет возвращать строку с удаленным последним символом. – juharr

+0

Функция RemoveLastCharacter выполняет то же самое, что и {letter.Remove (letter.Length - 1)}. Поскольку мне нужны только верхние буквы, я буду использовать функцию str.ToUpper(), чтобы гарантировать, что я всегда получаю результат с верхними буквами. – miguelbgouveia

5
char c = 'C'; 
char i = (char)(c + 1); 
System.Diagnostics.Debug.WriteLine(i); 

Он выведет 'D' в окно вывода отладки.

1

Вот метод, который должен делать то, что вы хотите. Тем не менее, проверка не для альфа-символов.

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". Если вы хотите добавить верхний регистр «А», просто измените последнюю строку на любую логику, в которой вы нуждаетесь.

+0

Ваша функция работает нормально. Возможно, моя функция более элегантная, потому что она рекурсивна. – miguelbgouveia