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

Найти среднюю длину слов в строке

20.02.2017, 17:57. Просмотров 488. Ответов 4
Метки нет (Все метки)

Здравствуйте, необходима помощь с заданием.
Дана строка текста, в которой слова разделены пробелами. Необходимо:
1. определить количество слов в строке;
2. найти среднюю длину слов в строке и вывести на экран слова такой длины, если их нет, то вывести сообщение «Таких слов нет»;
3. переставить слова в строке в обратном порядке, затем вывести на экран предложение.
1-й и 3-й пункт я сделал, соответственно нужна помощь со 2-ым.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
int main ()
{
    string str;
 
    str = "ololol ololo ooolllool";
    int counter = 0;
    for (int i=0;i<str.size();i++)
    if (str[i]==' ') counter++;
    cout << "V zadannou stroke " << counter+1 << " clov(a)" << endl;
    for (int i=str.size();i>0;i--)
    cout << str[i];
    getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2017, 17:57
Ответы с готовыми решениями:

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

Определить количество слов в тексте и среднюю длину слова
Консольное приложение Win32 Текст задачи: Дан текст, в котором слова отделяются пробелами, в...

Вычислить среднее число слов в предложении и среднюю длину предложения
ввести произвольный текст. Вычислить среднее число слов в предложении и среднюю длинну предложения....

Задается произвольный текст, Вычислить среднюю длину слов текста и вывести ее на экран
Задается произвольный текст, содержащий не более 10 строк, в каждой строке не бо-лее 80 символов....

Найти среднюю длину слова в тексте
Помогите, прога С++. найти среднюю длину слова в тексте( без учета пробелов)

4
likehood
981 / 826 / 395
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
20.02.2017, 19:07 2
Цитата Сообщение от mazahaler Посмотреть сообщение
3-й пункт я сделал
Такое впечатление создалось из-за того, что строка имеет весьма специфический вид. Если вместо неё взять строку "one two three", то ошибка сразу станет видна.

-----
Вообще, такие задачи решаются с помощью строковых потоков (stringstream). Вот пример разбиения строки на слова:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main ()
{
    string s = "one two three";
    string word;
    istringstream str(s);
    while (str >> word) {
        cout << word << endl;
    }
 
   return 0;
}
Если нужно вывести слова в обратном порядке, их можно сначала поместить в вектор.
2
Peoples
1358 / 845 / 751
Регистрация: 06.02.2016
Сообщений: 2,253
Записей в блоге: 18
Завершенные тесты: 4
20.02.2017, 19:22 3
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 <algorithm>
#include <string>
#include <sstream>
#include <numeric>
#include <vector>
#include <iterator>
using namespace std;
int main() {
    string s {};
    getline(cin,s);
    stringstream ss(s);
    vector<string>v {istream_iterator<string>(ss),istream_iterator<string>()};
    cout<<v.size()<<endl;
    double avg=static_cast<double>(accumulate(v.cbegin(),v.cend(),0,[](const int &x, const string &s) {
        return x+s.length();
    }))/v.size();
    cout<<avg<<endl;
    if(any_of(v.cbegin(),v.cend(),[&avg](const string &s) { return s.length()==avg; })) {
        copy_if(v.cbegin(),v.cend(),ostream_iterator<string>(cout," "),[&avg](const string &s) {
            return s.length()==avg;
        });
    }
    else cout<<"There are not this words"<<endl;
    cout<<endl;
    copy(v.crbegin(),v.crend(),ostream_iterator<string>(cout," "));
}
1
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 522
Завершенные тесты: 1
20.02.2017, 19:28 4
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
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
 
    int main (){
        
        setlocale(LC_ALL, "rus");
 
        register unsigned int count_word (0); // Слова
        register unsigned int count_letter (0); // Буквы
        std::string strone = "hello this world, you you are so beautiufl"; // Строка один
        std::string strtwo; // Пустая строка.
        std::istringstream str (strone);
 
        while (str >> strtwo){ // Подчитываем количесво строк.
            count_word ++;
            }
        
        for (int i(0); strone[i]; i++){
            
            strone[i] == ' ' ? false : count_letter ++;
        }
 
        std::cout << "Количество слов: "
                  << count_word
                  << std::endl
                  << "Количество букв: "
                  << count_letter
                  << std::endl
                  << "Среднее количество букв в слове: "
                  << count_letter/count_word
                  << std::endl;
 
 
        system ("pause");
        return 0;
    }
1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
20.02.2017, 19:40 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>
#include <string>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
 
    std::istringstream ist(str);
    using input_str = std::istream_iterator<std::string>;
    size_t num = 0, sum = std::accumulate(input_str(ist), input_str(), size_t(0),
        [&num](const size_t x, const std::string &str)
    {
        ++num;
        return x + str.length();
    });
    if (num)
        std::cout << static_cast<double>(sum) / num << std::endl;
}
Добавлено через 1 минуту
Цитата Сообщение от Photofenix Посмотреть сообщение
register
deprecated в C++17
Да и в текущем стандарте мало чем полезно для данного контекста.
1
20.02.2017, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2017, 19:40

Найти среднюю длину слова, предложения, абзаца в заданном тексте (файловый ввод/вывод)
получить следующую информацию о тексте, содержащуюся в файле: -среднюю длину предложения (в...

Определите длину самого короткого слова в строке слов.
Дана строка слов, разделенных пробелами и запятыми. Подсчитайте ко-личество подстрок (заключенных...

Подсчитать и вывести число слов в строке, имеющих длину больше k
Сначала вводится строка, содержащая только латинские буквы и пробелы. Затем на второй строке...


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

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

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