Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 6
1

В заданной строке посчитать количество слов, содержащих только строчные латинские буквы

05.06.2017, 22:31. Показов 5782. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте. Столкнулся с такой проблемой, что при вводе, например, строки "AAAA aaaa AAAAaaa aaaAAA" она выводит ответ 2 слова, однако должна вывести 1 слово ("аааа"). Не знаю, как исправить. Если вводить, например, много "аааа", разделённых пробелом, то он выведет всё правильно. А в первом случае неправильно. Помогите, пожалуйста.

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
#include <iostream> 
#include <windows.h> 
#include <string> 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите слова, содержащие только строчные латинские буквы. Разделителями слов считаются пробелы:" << endl;
    int ans = 1, x = 1;
    string s;
    getline(cin, s);
    s = s + ' ';
 
    for (int i = 0; i < s.length() - 1; i++) {
        if (s[i] == ' ' && s[i + 1] != ' ' && !(s[i] >= 'A' && s[i] <= 'Z')) {
            ans += x;
            x = 1;
        }
        else {
            if (!(s[i] >= 'a' && s[i] <= 'z')) x = 0;
        }
    }
    cout << "Количество слов: " << ans << endl;
    system("pause");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2017, 22:31
Ответы с готовыми решениями:

В строке подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на соседних местах
Во введённой строке подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на...

Во введённой строке подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на соседних местах
Во введённой строке подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на...

Посчитать количество слов в строке, содержащих 4 буквы
Дорогие форумчане! Пол дня воюю с этой задачей. Разобрался с решением: как сосчитать кол-во слов в...

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

6
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.06.2017, 22:54 2
Лучший ответ Сообщение было отмечено Syncmaxim как решение

Решение

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
#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
 
bool allLower(const std::string&);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::cout << "Введите слова, содержащие только строчные латинские буквы. Разделителями слов считаются пробелы:" << std::endl;
    std::string s, word;
    std::getline(std::cin, s);
    std::istringstream instr(s);
    std::istream_iterator<std::string> it(instr), eof;
    std::size_t count = std::count_if(it, eof, allLower);
    std::cout << "Количество слов: " << count << std::endl;
}
 
bool allLower(const std::string &word)
{
    for (auto const &ch : word)
    if (ch<'a' || ch>'z')
        return false;
    return true;
}
1
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.06.2017, 23:06 3
Можно проще через ::islower
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.06.2017, 23:14 4
MrGluck,
А на строчные символы кириллицы islower не возвращает true?
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 6
05.06.2017, 23:30  [ТС] 5
Цитата Сообщение от Даценд Посмотреть сообщение
for (auto const &ch : word)
А можно ещё подробнее про этот цикл? Первый раз встречаюсь с такой записью просто.
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.06.2017, 23:51 6
Syncmaxim,
Это цикл появился в стандарте C++11, он перебирает все элементы диапазона (vector, string, map и т.д.)
https://msdn.microsoft.com/ru-... 03382.aspx
https://habrahabr.ru/post/182920/
1
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.06.2017, 11:17 7
Цитата Сообщение от Даценд Посмотреть сообщение
А на строчные символы кириллицы islower не возвращает true?
::islower не умеет в локаль, работает только с латинскими символами. А вот std::islower уже может с локалью работать, но её нельзя просто взять и передать в качестве предиката, надо через лямбду вызывать.
1
06.06.2017, 11:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 11:17
Помогаю со студенческими работами здесь

Подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на соседних местах
Во введённой строке подсчитать количество слов, содержащих строчные буквы «t» и «s», стоящие на...

В заданной строке подсчитать количество слов, состоящих только из одной буквы
4)В заданной строке подсчитать количество слов, состоящих только из одной буквы.

Посчитать количество слов содержащих определённые буквы
Задание: Дан текст. Слова в тексте разделены пробелами. Текст завершается точкой. Определить...

Найти количество слов в строке которые начинаются на латинские буквы
Помогите,пожалуйста,СРОЧНО Нужно найти и вывести количество слов которые начинаются на латинские...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru