Подсчёт цифр и буков разного регистра
Требуется реализовать функцию, которая будет определять, сколько в строке больших
букв, маленьких букв и цифр.
Функция должна иметь сигнатуру:
int calcLetters ( char * iStr , int * oLowerCnt , int * oUpperCnt , int * oDigitsCnt );
Здесь iStr — указатель на начало строки, завершающейся нулевым символом. Параметры oLowerCnt, oUpperCnt и oDigitsCnt выходные: вызывающий передаёт в них указатель
на какие-нибудь локальные переменные, чтобы получить в них соответствующий результат.
Функция возвращает длину строки iStr, в переменную *oLowerCnt нужно записать количество маленьких букв, в *oUpperCnt записать количество больших букв, а в *oDigitsCnt
записать количество цифр.
В качестве тестовой задачи нужно прочитать все строки файла и распечатать статистику
для каждой из них.
Строки файла могут содержать любые печатаемые символы ASCII, включая пробелы (коды от 32 до 126 включительно). Поэтому рекомендуется использовать gets для чтения строк. Длина любой строки не превышает 100, строки могут быть пустыми. Учтите, что последняя строка файла также завершается символом перевода строки.
Для каждой строки входного файла выведите статистику ровно в том же формате, как в примере выходных данных:
Line 1 has 30 chars: 24 are letters (23 lower, 1 upper), 0 are digits.
Line 2 has 32 chars: 22 are letters (22 lower, 0 upper), 0 are digits.
Line 3 has 26 chars: 18 are letters (17 lower, 1 upper), 0 are digits.
Line 4 has 12 chars: 7 are letters (7 lower, 0 upper), 0 are digits.
Line 5 has 31 chars: 21 are letters (20 lower, 1 upper), 0 are digits.
Line 6 has 13 chars: 6 are letters (6 lower, 0 upper), 1 are digits.
Line 7 has 30 chars: 19 are letters (19 lower, 0 upper), 1 are digits.
Line 8 has 1 chars: 0 are letters (0 lower, 0 upper), 0 are digits.
** ломаю голову уже который день, получилось только это:**
#include <stdio.h>
main() {
char str[255];
int i,let_b, let_s, digit;
gets(str);
let_s = 0;
let_b = 0;
digit = 0;
for (i=0; str[i]!='\0'; i++)
if (str[i] >= 'a' && str[i] <= 'z') let_s += 1;
else if (str[i] >= 'A' && str[i] <= 'Z') let_b += 1;
else if (str[i]>='0'&&str[i]<='9') digit++;
printf("%d %d %d", let_s, let_b, digit);
}```
как сюда впихнуть войд? и что делать, если строк несколько? буду благодарна за ваши ответы
Ответы (1 шт):
Функция возвращает длину строки iStr, в переменную *oLowerCnt нужно записать количество маленьких букв, в *oUpperCnt записать количество больших букв, в *oDigitsCnt записать количество цифр
Приблизительно так:
#include <ctype.h>
int calcLetters (char *iStr, int *oLowerCnt, int *oUpperCnt, int *oDigitsCnt) {
char c:
int j:
int len = strlen(iStr);
*oLowerCnt = 0;
*oUpperCnt = 0;
*oDigitsCnt = 0;
for (j=0; j<len; j++) {
c = iStrr[j];
if (islower(c)) oLowerCnt++;
if (isupper(c)) oUpperCnt++;
if (isdigit(c)) oDigitsCnt++;
}
return len;
};
Код писал "навскидку", поэтому возможны опечатки - проверяйте!
что делать, если строк несколько?
Цикл делать!!! :-) Как-то так:
#include <stdio.h>
int main(int argc, char *argv[]) {
char buf[1024];
int oLowerCnt, oUpperCnt, oDigitsCnt;
. . .
while (fgets(buf, 1024, stdin) {
len = calcLetters (buf, &oLowerCnt, &oUpperCnt, &oDigitsCnt);
printf("%d %d %d %d\n", len, oLowerCnt, oUpperCnt, oDigitsCnt);
}
. . .
}