Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Long_Sp
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 9

Подсчет количества одинаковых слов

26.05.2016, 00:26. Показов 3721. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
http://pastebin.com/s8Ewa9Dp
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
// Zadanie2.cpp: определяет точку входа для консольного приложения.
//
/*
7. Дан текст.
Группы символов, разделенные пробелами (одним или несколькими) и не
содержащие пробелов внутри себя, будем называть, словами.
а) Для каждого из слов указать, сколько раз оно встречается
среди всех слов, образованных символами данного текста.
б) Найти все слова, содержащие наибольшее количество
гласных латинских букв (а, е, i, о, u).
в)Найти все слова, в которых доля
букв а, b максимальна.
г) В тех словах, которые оканчиваются сочетанием
букв ing, заменить это окончание на ed.
*/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>
#include <Windows.h>
using namespace std;
void obnul(char*str) {
    for (int i = 0; str[i] != '\0'; i++)
        str[i] = 0;
}
 
char a(char *text) {
    char buff[255]; obnul(buff); short j = 0; int slovo=0;
    //а) Для каждого из слов указать, сколько раз оно встречается
    //среди всех слов, образованных символами данного текста.
    for (int i=0; text[i] != '\0';++i) {
        //Перебираем весь массив до конца
        //Если не встретили пробел
        // И Пристваиваем буферу первое слово
        if (!isspace(text[i])||isalpha(text[i])) {
            buff[j] = text[i];
            j++;
        }
        //Если встретили пробел, а следующий элемент это не цифра или буква
        //Начинаем сравнивать буфер со всеми словами до конца
        else if (isspace(text[i])) {
            short n = 0;//счетчик буфера
            for (int k=0; text[k] != '\0'; ++k) {
                //Если текущий элем буфера равен элему текста=> size++
                if (buff[n] == text[k]&&buff[n]!='\0') {
                    n++;
                    continue;
                }
                //Если не равен и счетчик n=j => slovo++
                else if (buff[n] != text[k] && n == j) {
                    slovo++;
                    n = 0;
                }
            }
            cout << "Слов: " << buff << '=' << slovo << " штук"<<endl;
            obnul(buff);
            j = 0;
            slovo = 0;
        }
    }
    return 0;
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);//Ввод и вывод на консоли сделать русским
    char text[255]= ("There are two are two one this demo program ");
    cout << "Исходный текст:\----------------------\n"<<text<<endl;
    a(text);
    system("pause");
    return 0;
}
как пофиксить выход за границы массива в buff?


0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2016, 00:26
Ответы с готовыми решениями:

Подсчет количества одинаковых элементов массива
Добрый вечер. Хочу ввести массив и отобразить какой элемент и сколько раз повторяется. Получилось, но хотелось что бы последующие элементы,...

Подсчет количества символов разного вида на одинаковых позициях в разных строках
Добрый день. нужна помощь в написании программки. Я только недавно начал изучать С++ и еще много чего не понимаю. Поэтому и прошу...

Подсчет количества слов
Есть два файла, 1.txt и 2.txt Задание: 1) Скопировать в файл 2.txt только те строки из 1.txt, которые начинаются с буквы...

10
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.05.2016, 00:44
C++
1
2
3
4
5
6
7
void obnul(char*str) {
    for (int i = 0; str[i] != '\0'; i++)
        str[i] = 0;
}
 
char a(char *text) {
    char buff[255]; obnul(buff);
Почему ты думаешь что у obnul будет элемент равным нулю? Бесконечный цикл потенциальный.
0
 Аватар для Long_Sp
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 9
26.05.2016, 01:37  [ТС]
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Бесконечный цикл потенциальный.
Дело в том, что оно только в конце(последнее слово) крашится, по ходу выполнения, при обращении к функции obnul()- нет ошибок.
Можете показать в коде, каким образом стоит остановить бесконечный цикл?

Добавлено через 2 минуты
Потому что '\0' это ведь терминатор массива, а не 0, если я правильно понял, это ведь так?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.05.2016, 01:38
Long_Sp, зачем вы спорите?
C++
1
char arr[ 255 ] = {};
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.05.2016, 01:39
Цитата Сообщение от Long_Sp Посмотреть сообщение
Потому что '\0' это ведь терминатор массива
2
 Аватар для Long_Sp
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 9
26.05.2016, 01:48  [ТС]
Моя цель не Вас оспорить, а понять почему инициализация массива со скобочками сделает цикл не бесконечным)
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.05.2016, 01:52
Long_Sp, потому что С++ быстрый язык и выделяя массив так int arr[10]; зачем его обнулять, вдруг его тут же будут заполнять и мы потеряем операций так 10. Зачем ? Поэтому после этой строке в массиве могут быть ЛЮБЫЕ числа и шанс, что в нём будет ноль - крайне мал. А с char - тоже самое - следовательно, что в вашем массиве в 255 элементах будет всё же ноль по теории вероятности возможен - НО есть шанс ЧТО ЕГО ТАМ НЕ БУДЕТ и будет выход за пределы.
1
 Аватар для Long_Sp
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 9
26.05.2016, 08:17  [ТС]
http://pastebin.com/uHDHAD7t
Заменил все '\0' на размер массива
в итоге теперь такая ошибка:
Миниатюры
Подсчет количества одинаковых слов  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.05.2016, 08:36
Все вызовы функций, проверяющих символ, сделать по образцу:
C++
1
isspace(static_cast<unsigned char>(text[i]))
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
26.05.2016, 08:45
Лучший ответ Сообщение было отмечено Long_Sp как решение

Решение

Замените
char buff[255]; obnul(buff);
на
C++
1
 char buff[255]={0};
После этого все работает.
1
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
29.06.2017, 12:57
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
void replace(std::string& str, std::string const from, std::string const to)
{
    std::string::size_type new_pos = 0;
    while ((new_pos = str.find(from, new_pos)) != std::string::npos) {
        str.replace(new_pos, from.size(), to);
    }
}
 
int main() {
    std::string s = "ping, king, ings stinger (sting), inging";
    replace(s, "ed", "ing");
    std::cout << s;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2017, 12:57
Помогаю со студенческими работами здесь

Подсчет количества слов
Допустим, дана строка: &quot;129 s23 ertr 234 0 e&quot; Как подсчитать количество слов, состоящих только из латинских букв?

Подсчет количества слов
С клавиатуры вводится строка. Составить программу, которая подсчитывает количество слов, имеющих нечетную длину; вводит на экран частоту...

Подсчет количества слов в строке
Помогите пожалуйста написать программу для подсчета количества слов в строке

Подсчет количества слов в строке
Все привет. Помогите пожалуйста написать код на с++ С клавиатуры вводится текстовая строка. Составить программу, которая подсчитает...

Подсчет количества уникальных слов
Добрый день. Есть программа для подсчета количества слов тексте: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru