Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2019, 20:53   #1
Yoooy
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 13
По умолчанию Определить слово с самым большим количеством заглавных букв . Файлы [Си] C++

Файл содержит набор символов. Слово - произвольная последовательность латинских символов, разделители-любые другие символы.Определить слово с самым большим количеством заглавных букв. Если таких несколько вывести все
Подскажите как сделать пожалуйста как все вывести и ввод из файла сделать


Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define DELIM " \t\n"
 
int upper_letters(const char * word) {
    int uppers = 0;
 
    for ( ; *word; ++word )
        uppers += !!isupper(*word);
    
    return uppers;
}
 
int main(void) {
    char buf[BUFSIZ];
 
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        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);
    }
 
    return 0;
}
Yoooy вне форума Ответить с цитированием
Старый 19.03.2019, 22:06   #2
Yoooy
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 13
По умолчанию

сделал ввод из файла. Подскажите пожалуйста как вывести все слова если в них одинаковое количество заглавных букв
Код:
#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;
}
Yoooy вне форума Ответить с цитированием
Старый 20.03.2019, 11:03   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Не вдаваясь сильно в код, могу только набросать алгоритм. Завести массив строк и счетчик, изначально в нем 0. Если в слове нужных букв меньше, чем в уже найденном максимальном - ничего не делать. Если равно - добавить слово в массив, инкрементировать счетчик. Если больше - записать слово в первый элемент массива, в счетчик - единицу. Как-то так.
(Приводится состояние после анализа текущего слова)
Изображения
Тип файла: jpg ABYRVALG.JPG (12.5 Кб, 40 просмотров)

Последний раз редактировалось digitalis; 20.03.2019 в 11:06.
digitalis вне форума Ответить с цитированием
Старый 24.03.2019, 22:18   #4
Yoooy
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 13
По умолчанию

такс придумал
проходим файл 2 раза, на первом проходе ищем максимальное количество заглавных букв(maxUppers), содержащихся в словах, а на втором — выводим слова, содержащие найденное количество указанных букв. Как встречаем такое слово, так сразу и выводим
вопрос: как теперь зная вывести все слова длинны maxUppers?
хотя бы пример кода можно пожалуйста
Yoooy вне форума Ответить с цитированием
Старый 25.03.2019, 09:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Код:
if (upper_letters(curWord) == maxUppers){
   printf("%s\n",curWord)
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2019, 12:48   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Зачем файл дергать 2 раза ? Чем мой вариант не катит?
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение минимального слово с количеством букв рассказать как работает - C (СИ) Александр121 Помощь студентам 2 04.12.2017 15:25
FREE PASCAL. Слово с самым большим количеством слогов в текстовом файле Ku-klan Помощь студентам 9 18.06.2012 09:11
Сформировать 2 множества,состоящих из заглавных букв латинского алфавита. Определить элементы,принадлежащ Aktor1992 Паскаль, Turbo Pascal, PascalABC.NET 0 12.04.2011 22:13
Строки, как найти слово с наименьшим количеством букв(Delphi) Dima-91 Помощь студентам 9 30.09.2010 17:37