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

#c# #string #uppercase #lowercase

Вопрос:

Я пытаюсь проверить в C#, содержит ли вводимая мной буква прописную или строчную букву, и указать, сколько существует строчных и прописных букв. «Ввод» — это длина строки ввода, который вы вводите, а «буквы» — это строковый массив букв a — z в нижнем регистре.

Первые два оператора проверяют, содержит ли «Ввод» строчную букву, и еще, если «Ввод» содержит строчную букву, они оба, похоже, работают, но по какой-то причине он не может проверить их обоих: последний оператор else if проверяет, содержит ли ввод по крайней мере 1 прописную и 1 строчную буквы:

 for(int i = 0; i < letters.Length; i  ) 
{
    if(Input.Contains(letters[i].ToLower()))
    {
        WriteLine("Lowercase");
    }
    else if (Input.Contains(letters[i].ToUpper()))
    {
        WriteLine("Uppercase");
    {
    else if (Input.Contains(letters[i].ToLower()) amp;amp;
        Input.Contains(letters[i].ToUpper()))   
    {
        WriteLine("Uppercase and Lowercase");
    }
}    
 

Комментарии:

1. вместо такой проверки вы можете использовать символы ascii. так будет лучше. поделитесь своим примером входной строки.

2. Что-То Вроде «Привет, Мир»

3. Ввод и буквы одинаковые или разные ?

4. Ввод будет тем, что вы введете, а буквы-это массив, содержащий буквы от a до z в виде строки

5. var lowerCount = letters.Count(char.IsLower); ? Я предполагаю, что вы можете выяснить остальное

Ответ №1:

Безусловно, есть лучшие способы сделать это. Но причина, по которой то, что у вас сейчас есть, не работает, заключается в том, что если последнее условие когда-либо будет истинным, то таким же будет и первое условие. Поэтому if в этом случае всегда будет выполняться первый блок. Чтобы исправить то, что у вас есть, вы должны переместить последнее условие на первое:

 for(int i = 0; i < letters.Length; i  ) 
{
    if (Input.Contains(letters[i].ToLower()) amp;amp;
        Input.Contains(letters[i].ToUpper()))   
    {
        WriteLine("Uppercase and Lowercase");
    }
    else if (Input.Contains(letters[i].ToUpper()))
    {
        WriteLine("Uppercase");
    {
    else if(Input.Contains(letters[i].ToLower()))
    {
        WriteLine("Lowercase");
    }
}
 

Ответ №2:

Вы можете написать метод, который повторяет символы в строке и поддерживает счетчик символов верхнего/нижнего регистра char.IsUpper , используя методы char.IsLower и.

 (int,int) CheckCase(string value)
{
    var countUpper = 0;
    var countLower = 0;
    foreach(var c in value)
    {
        if(char.IsUpper(c)) 
        {
            countUpper  ; 
        }
        else if(char.IsLower(c)) 
        {
            countLower  ; 
        }
    }
    
    return (countUpper,countLower);
}
 

Как уже отмечалось, для этого потребуется всего одна итерация символов в строке.

Теперь вы можете использовать этот метод как

 var (countUpper,countLower) = CheckCase("SampleString");
 

С учетом количества прописных и строчных символов в руке теперь вы можете реализовать свою логику отображения