• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Определить слово с самым большим количеством заглавных букв

  • Автор темы Автор темы wooop
  • Дата начала Дата начала

wooop

Ученик
Регистрация
24 Мар 2019
Сообщения
1
Реакции
0
Баллы
0
Определить слово с самым большим количеством заглавных букв

Файл содержит набор символов. Слово - произвольная последовательность латинских символов, разделители-любые другие символы.Определить слово с самым большим количеством заглавных букв. Если таких несколько вывести все
Подскажите пожалуйста как все слова вывести
Вроде понимаю Завести массив строк и счетчик, изначально в нем 0. Если в слове нужных букв меньше, чем в уже найденном максимальном - ничего не делать. Если равно - добавить слово в массив, инкрементировать счетчик. Если больше - записать слово в первый элемент массива, в счетчик - единицу.
Но реализовать не могу
Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 100
#define DELIM " \t\n"

int upper_letters(const char * word) {
    int uppers = 0;
 
    for ( ; *word; ++word )
        uppers += !!isupper(*word);
    
    return uppers;
}

int main(int argc, char const *argv[])
{

  	char buf[N];//обьявление строкового массива
	int i=0,max=0;
	FILE *filP;
	filP=fopen("file.txt","r");

	fgets(buf,N,filP);

	
 
   		fgets(buf,N,filP);
        char * str = buf, * maxWord, * curWord;
        int maxUppers, curUppers;
 
        for ( ; *str; ++str )
            if ( ! isalpha(*str) )
                *str = ' ';
        
        maxWord = strtok(buf, DELIM);
        maxUppers = upper_letters(maxWord);
 
        while ( ( curWord = strtok(NULL, DELIM) ) ) {
            curUppers = upper_letters(curWord);
            if ( curUppers > maxUppers ) {
                maxWord = curWord;
                maxUppers = curUppers;
            }
        }
 
        printf("First word with max. upper letters: %s\n", maxWord);
    
 
	
	fclose(filP);
	return 0;
}
 
К сожалению, на СИ не пишу, но может быть другой алгоритм попробовать, если с этим проблемы? Например, так: проходим файл 2 раза, на первом проходе ищем максимальное количество заглавных букв, содержащихся в словах (просто число!), а на втором — выводим слова, содержащие найденное количество указанных букв. Как встречаем такое слово, так сразу и выводим. Не?
 
Назад
Сверху