Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
EdHaker
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 100
#1

Легкое задание на строки, найти слова верхнего и нижнего регистра С++ - C++

25.10.2015, 21:37. Просмотров 299. Ответов 4
Метки нет (Все метки)

Нам дана строка, нужно найти в ней слова , которые все в верхнем регистре(ПРИВЕТ), в нижнем регистре(привет), в смешанном регистре(ПрИвЕт). Как это сделать на С++? Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2015, 21:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Легкое задание на строки, найти слова верхнего и нижнего регистра С++ (C++):

Написать функцию которая в строке заменяет все символы верхнего регистра в символы нижнего регистра
Здравствуйте. помогите написать программу. Написать функцию которая в строке...

В новом файле заменить все латинские буквы верхнего регистра на буквы нижнего регистра
9. В новом файле заменить все латинские буквы верхнего регистра на буквы...

Заменить все буквы нижнего регистра в строке на буквы верхнего регистра
Определить функцию, заменяющую все буквы нижнего регистра в строке на буквы...

Функция преобразует буквы верхнего регистра в строке s в буквы нижнего регистра
Задание: strlwr char *strlwr( char *s); Функция преобразует буквы верхнего...

Поиск дублирующихся символов верхнего и нижнего регистра
Помогите реализовать: получив строку, ищем в ней адрес первого прописного...

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника
Даны два прямоугольника, стороны которых параллельны и перпендикулярны осям...

4
Dimension
Dimension
573 / 442 / 221
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
25.10.2015, 21:41 #2
берете слово ,проверяете если все в верхнем ,то нашли ,если в все в нижнем то тоже нашли ,если кол-во в верхнем равно кол-ву в нижнем то тоже нашли
0
EdHaker
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 100
25.10.2015, 22:09  [ТС] #3
Dimension, пожалуйста, если можно, напишите хоть центральную часть кода, сам алгоритм понимаю, но как написать не знаю, а завтра уже сдавать(

Добавлено через 37 секунд
и как выделить слово , если оно в куче пробелов или различных других знаков?

Добавлено через 24 минуты
Неужели это так сложно и никто не может подсказать?
0
hoggy
Заблокирован
26.10.2015, 00:04 #4
Цитата Сообщение от EdHaker Посмотреть сообщение
Неужели это так сложно и никто не может подсказать?
просто задание очень простенькое, легенькое, а потому скучненькое...

http://rextester.com/LUPYB81538


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <string>
 
 
using str = std::string;
 
// определяет регистр букв
enum eCASE { eLOWER = 1<<1, eUPPER =1<<2, eMIXED = 1<<3 };
eCASE checkCase(const char* data, const size_t length);
 
// указатель на функцию-обработчик токена
typedef void callback(const char* data, const size_t length);
 
// вычленяет из текста токены (слова), 
// и передает их для дальнейшего анализа
void tokenize(callback func, const str& text, const str& delimiters = " ", bool trimEmpty = false);
 
// функция анализирует обнаруженное слово
void analyze(const char* data, const size_t length);
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    // токенайзер обнаружит все токены
    // и передаст анализатору каждый из них
    tokenize(analyze, "HELLO hello Hello");
}
 
// анализ токена сводится к тому
// что бы определить в каком регистре 
// было записано слово
void analyze(const char* data, const size_t length)
{
    const str word(data, length);
    
    std::cout<<"word '"<<word<<"' is ";
    
    const auto result = checkCase(data, length);
    
    if(result == eLOWER)
        std::cout<<" lower case\n";
    else if(result == eUPPER)
        std::cout<<" upper case\n";
    else
        std::cout<<" mixed case\n";
}
 
// проверяет регистр каждой буковки
// определяя регистр всего токена
eCASE checkCase(const char* data, const size_t length)
{
    int flags = 0;
    
    for(size_t n=0; n<length;++n)
       if( !islower(data[n]) )
           flags |= eUPPER;
       else
           flags |= eLOWER;
        
    if(flags == (eLOWER|eUPPER) )
        return eMIXED;
    else if(flags == eLOWER)
        return eLOWER;
    return eUPPER;
}
 
// по знакам пунктуации находит где начинается и заканчивается очередное слово
// и скармливает его функции-обратного вызова
void tokenize(callback func, const str& text, const str& delimiters, bool trimEmpty)
{
    str::size_type pos, lastPos = 0;
    while(true)
    {
        pos = text.find_first_of(delimiters, lastPos);
       
        if(pos == std::string::npos)
        {
            pos = text.length();
            if(pos != lastPos || !trimEmpty)
                func(text.data()+lastPos, pos-lastPos);
            break;
        }
        else
        {
            if(pos != lastPos || !trimEmpty)
                func(text.data()+lastPos, pos-lastPos);
        }
        lastPos = pos + 1;
    }
}
/зы:
представленное решение обладает серьезным недостатком.
из-за чего я бы, например, его не принял.

дело в том, что оно не поддерживает юникод.
из-за чего могут возникнуть проблемы с национальными символами.
(русскими буковками например).

хорошая новость в том,
что добавить поддержку юникода очень легко и просто.
предоставлю вам сделать это самостоятельно.
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
26.10.2015, 14:31 #5
Лучший ответ Сообщение было отмечено EdHaker как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cctype>
#include <iostream>
 
using namespace std;
 
int detect_case(string str) {
    bool upper_present = false;
    bool lower_present = false;
    for (string::iterator i = str.begin(); i != str.end(); i++) {
        upper_present = upper_present || isupper(*i);
        lower_present = lower_present || islower(*i);
        if (upper_present && lower_present) { break; }
    }
    return (upper_present ? 2 : 0) + (lower_present ? 1 : 0);
}
 
int main()
{
    cout << detect_case("123") << endl;
    cout << detect_case("xyz") << endl;
    cout << detect_case("ABC") << endl;
    cout << detect_case("Vtulhu") << endl;
    return 0;
}
0
26.10.2015, 14:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2015, 14:31
Привет! Вот еще темы с решениями:

Вывести подматрицу с данной, отметив индексы (номер строки и столбца) верхнего левого элемента и правого нижнего
Пусть дано матрицу. Необходимо вывести подматрицу с данной, отметив индексы...

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

Переписать в новый фаил строки, удалив из них все латинские буквы нижнего регистра
Перепиаать в новый фаил стооки,удалив из них все латинские буквы нижнего...

Написать программу, меняющую первую букву каждого слова на эту же букву верхнего регистра
Дан массив из 10 строк по 80 символов, требуется заменить первую букву в каждом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru