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

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

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

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

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

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

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

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

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

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

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

Добавлено через 24 минуты
Неужели это так сложно и никто не может подсказать?
0
hoggy
Нарушитель
Эксперт С++
7081 / 3125 / 647
Регистрация: 15.11.2014
Сообщений: 7,172
Завершенные тесты: 1
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

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

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

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


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

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

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