Функция C countLetter - PullRequest
       2

Функция C countLetter

0 голосов
/ 12 декабря 2018

Итак, я создал функцию, которая в настоящее время подсчитывает все отдельные строчные буквы в строке и выводит их следующим образом:

a: 3

b: 5

и так далее ...

Я изо всех сил пытаюсь заставить функцию сложить как прописные, так и строчные буквы вместе, чтобы для обоих значений был один выход.Например, если есть 3 'a' и 4 'A', тогда вывод для A / a должен быть 7. На данный момент выводятся только строчные буквы.

#include <stdio.h>

void countLetters(char * strings[])
{
int loweralphabet[26] = { 0 };
int upperalphabet[26] = { 0 };
int i, j;

for (i = 0; i <= 2; i++) {
    for (j = 0; strings[i][j] != '\0'; j++) {
        char c = tolower(strings[i][j]);
        if (c >= 'a' && c <= 'z') {
            loweralphabet[c - 'a']++;
        if (c >= 'A' && c <= 'Z') {
            upperalphabet[c - 'A']++;
        }
        }
    }
}
printf("\n");

for (i = 0; i < 26; i++) {
    printf("%c / %c: %d\n", ('a' + i), ('A' + i), loweralphabet[i], 
upperalphabet[i]);
}
printf("\n");

return 0;
}

int main()
{
char * strings[] = { "Is laid back living your thing, ",
                     "or are you an adrenaline junkie always seeking 
                      adventure ?",
                     "Are you a culture lover looking to learn new things or 
                      do you live for the night ?",
                     "Do your friends see you as a sports fanatic, ",
                     "or are you a frequent gig goer obsessed with music ? 
                     ",
                     "Whichever of these you identify with, x is the 
                      place where you can follow your interests ",
                     "as well as explore new passions.",
                     "" };
countLetters(strings);
}

Если я простосложите два счета вместе в функции печати, при выводе программы это показывает: enter image description here

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Разобрался.В настоящее время программа считает только первые 3 строки:

    for (i = 0; i <= 2; i++)

После того, как программа попросила сосчитать все 7, программа функционировала как задумано.

0 голосов
/ 12 декабря 2018

вот исправленный цикл подсчета

for (i = 0; i <= 2; i++) {
    for (j = 0; strings[i][j] != '\0'; j++) {
        char c = strings[i][j];
        if (c >= 'a' && c <= 'z') 
            loweralphabet[c - 'a']++;
        if (c >= 'A' && c <= 'Z') 
            upperalphabet[c - 'A']++;


    }
}

вы устанавливали c в нижний регистр, а затем пытались проверить, был ли он в верхнем регистре, но ваша тестовая вложенность тоже была нарушена

ВАШ кодна самом деле говорит это, как только отступ исправлен.

for (i = 0; i <= 2; i++) {
    for (j = 0; strings[i][j] != '\0'; j++) {
        char c = tolower(strings[i][j]);
        if (c >= 'a' && c <= 'z') {
            loweralphabet[c - 'a']++; <<<< missing } here
            if (c >= 'A' && c <= 'Z') { <<< can never be true c is always lower case , even if you got here
                upperalphabet[c - 'A']++;
            }
        }
    }
}

, поэтому вы никогда не делали второй тест

0 голосов
/ 12 декабря 2018
        char c = tolower(strings[i][j]);
        if (c >= 'a' && c <= 'z') {
            loweralphabet[c - 'a']++;
        if (c >= 'A' && c <= 'Z') {

После строки № 1 условие в строке № 4 никогда не будет выполнено.Более того, он никогда не будет удовлетворен из-за того, что он помещен в блок условия в строке # 2 (то есть вы убедились, что c в нижнем регистре, и теперь вы проверяете, является ли он заглавным;это не так).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...