2016-11-10 5 views
1

У меня есть массив размером 25, который хранит заглавные буквы в массиве. Он хранит для моего теста ввода пользователя «A», «B», «C» и «D». Моя программа подсчитывает количество этих букв в массиве и выводит их. Например, если AABBCCDD был введен, он сказал бы, что есть 2 A, 2 B, 2 C и 2 D. Теперь я пытаюсь заставить его принимать строчные буквы и считать их до тех пор, пока они совпадают с прописными буквами. Например, если я ввел, aA, Bb, cC и dD, он все равно напечатает, что их по два. МОЙ код:Как использовать функцию toupper() для подсчета ввода как в нижнем, так и в верхнем регистре?

int main(void) 
{ 
    char array[25]; 

    printf("Enter array: \n"); 
    scanf("%[^\n]", array); 
    printf(Array is: ", array); 

    count(array, 'A'); 
    return 0; 
} 
void count(char* array, char p) 
{  
int i, count = 0; 
for (i = 0; array[i] !='\0'; i++) 
    if(array[i] == p) 
    count++; 
printf("Number of %c's: %d\n, p, count); 
} 

Я хочу, чтобы код учитывался как «a», так и «A». Использует toupper() подход?

+0

'p = toupper ((unsigned char) p);' before loop .. 'if (массив toupper ((unsigned char) [i]) == p)' – BLUEPIXY

+0

Правильно! спасибо – CodeFreak

+0

@CodeFreak Если это то, что у вас есть, и это работает, тогда в чем вопрос? – Potatoswatter

ответ

0
void count(char* array, char u) //pass only uppercase 
{  
    int i, count = 0; 
    char l = tolower(u);  //get the lower 
    for (i = 0; array[i] !='\0'; i++) { 
     if(array[i] == u || array[i] == l) 
     count++; 
    } 
    printf("Number of %c's: %d\n, p, count); 
} 

BUT! Для 26 букв алфавита вы переходите по строке 26 раз. Представьте, что строка будет содержать более 100 символов.
Попробуйте сделать решение, которое будет проходить только один раз.

0

Просто замените цикл if in for с нижеприведенным фрагментом и он решит вашу проблему.

если (ToUpper (массив [я]) == р)

В этом случае каждый comaprison будет с прописными буквами характера и, как вы передаете полукокс быть подсчитаны в качестве аргумента, убедитесь, что вы передаете это в верхнем регистре

Надеюсь, это поможет.

+0

У меня возникла ошибка, при которой «запрос для пользователя« toupper »находится в чем-то, что не является структурой или объединением» – CodeFreak

+0

Вам нужно передать как toupper (array [i]). – dips

1

вам просто нужно заменить if(array[i] == p) условный блок с

if(toupper(array[i]) == p)

И если вы не уверены в том случае р (р может быть любым из нижнего регистра в верхнем регистре) заменить его

if(toupper(array[i]) == toupper(p))