Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 24.03.2019, 21:33   #1 (permalink)
wooop
Новичок
 
Регистрация: 24.03.2019
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Определить слово с самым большим количеством заглавных букв

Файл содержит набор символов. Слово - произвольная последовательность латинских символов, разделители-любые другие символы.Определить слово с самым большим количеством заглавных букв. Если таких несколько вывести все
Подскажите пожалуйста как все слова вывести
Вроде понимаю Завести массив строк и счетчик, изначально в нем 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;
}
wooop вне форума   Ответить с цитированием

Старый 24.03.2019, 21:33
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот вам темы по аналогичным проблемам

Сформировать числовой массив с количеством букв в строке на Си
Чтобы вводя слово в строку, набирая первые буквы уже появлялось слово целиком?
Программа для обработки массивов с разным количеством элементов. Pascal
Разработка циклической программы с неизвестным количеством повторений
в чем отличие i5 и i3 с одними частотами и количеством ядер?

Старый 24.03.2019, 21:47   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

К сожалению, на СИ не пишу, но может быть другой алгоритм попробовать, если с этим проблемы? Например, так: проходим файл 2 раза, на первом проходе ищем максимальное количество заглавных букв, содержащихся в словах (просто число!), а на втором — выводим слова, содержащие найденное количество указанных букв. Как встречаем такое слово, так сразу и выводим. Не?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:39.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.