Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.11.2020
Сообщений: 14

Удаление слов из строки, не привыкающих заданную заранее длину. Строка заполняется автоматически

05.11.2020, 21:10. Показов 563. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вот такая проблема. Ниже представлен код программы, написанной в c++ builder. Вопрос в следующем. Вот есть текстовый файл, в папке Debag проекта, название файла можно понять из Кода, в этом текстовом файле находятся слова через пробел. Просто набор символов. Задача такова: пользователь вводит с клавиатуры значение L и программа уделяет из этой строки слова, длина которых не превышает значение L.
В моем коде представлено чтение из текстовика и вывод слов в консоли. Вывод слов осуществляется после внедрения их в массив array. Так же представлен Ввод числа L.
Помогите, пожалуйста, реализовать сравнение длины слов со значением L и их удаление из массива. Я попытался реализовать это с помощью счетчика. Посимвольная проверка строки, если элемент не пробел то count++. А если элемент является пробелом, но предыдущий проверяемый НЕ пробел, то счётчик обнуляется. Толком реализовать это ума не хватило. Остановился на проблеме того, как мне записанную в count длину слова сравнить с L и нужные слова записать в новый массив.
Либо каким то другим способом.
Очень надеюсь на вашу помощь, дорогие товарищи!!


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
93
94
95
#include <cstdlib>
#include <cstdio>
#include <conio.h>
#include <cstring>
 
using namespace std;
 
int main(int argc, char* argv[]) {
    system("chcp 1251");
    printf("***************************************************************\n");
    printf("***************************************************************\n");
    FILE *fp = fopen("task_6.txt", "rt");
    int size = 0;
    while (fgetc(fp) != EOF)
        size++;
    rewind(fp);
    char *str = new char[size + 1];
    fgets(str, size + 1, fp);
    fclose(fp);
    // ------------- парсер ---------------
    while (*str == ' ')
        str++; // удаляем пробелы в начале строки
    int n = strlen(str);
    while (str[n - 1] == ' ') { // удаляем пробелы в конце строки
        str[n - 1] = '\0';
        n--;
    }
    int k = 0;
    for (int i = 0; i < size; i++) {
        if ((str[i] == ' ') && (str[i + 1] != ' ')) {
            k++;
        }
    }
    char **array = new char*[++k]; // выделение памяти для массива слов
    int i = 0;
    while (i < k) { // выделение слов
        if (*str != ' ') {
            array[i] = strtok(str, " ");
            str = str + strlen(array[i]) + 1;
            i++;
        }
        else {
            str++;
        }
 
    }
    for (int i = 0; i < k; i++) {
        printf("%s\n", array[i]);
    }
 
    printf("***************************************************\n");
    printf("Удаление слова длиной L\n");
    printf("***************************************************\n");
    int L;
    printf("Введите значение длинны слова: L = ");
    scanf("%i", &L);
    int count = 0, k2 = 0;
 
    for (int i = 0; i < size; i++) {
        if (str[i] != ' ') {
            count++;
        }
 
        if((str[i] == ' ') && (str[i - 1] != ' ')){
           while(count <= L){
             k2++;
             count = 0;
           }
        }
    }
    char **itog = new char*[++k2]; // выделение памяти для массива слов
    //int i = 0;
    while (i < k2) { // выделение слов
        if (*str != ' ') {
            itog[i] = strtok(str, " ");
            str = str + strlen(itog[i]) + 1;
            i++;
        }
        else {
            str++;
        }
 
    }
 
 
 
    // Вывод редактированого того же массива
    for (int i = 0; i < k2; i++) {
        printf("%s\n", itog[i]);
    }
 
    system("pause");
    return 0;
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2020, 21:10
Ответы с готовыми решениями:

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

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

Удалить заданную часть строки и определить длину полученной строки
Дана строкой длиной до 40 символов. Используя функции по работе с символьными переменными, удалить часть строки и определить длину...

4
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
06.11.2020, 06:20
Цитата Сообщение от SkremBler Посмотреть сообщение
Либо каким то другим способом
Именно что другим! Зачем сишный огород городить, если работаете в билдере...
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
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include <iostream>
//---------------------------------------------------------------------------
 
#pragma argsused
 
using namespace std;
 
int main(int argc, char* argv[])
{
    system("chcp 1251");
    String Path = ExtractFilePath(ParamStr(0));
    auto_ptr<TStringList> tmp (new TStringList);
    tmp->LoadFromFile(Path + "task_6.txt");
    auto_ptr<TStringList> L (new TStringList);
    L->Delimiter = ' ';
    L->DelimitedText = tmp->Text;
    int Len;
    cout << "Введите значение длинны слова: Len = ";
    cin >> Len;
    for(int i = L->Count - 1; i >= 0; i--)
      if(L->Strings[i].Length() <= Len) L->Delete(i);
    tmp->Text = L->DelimitedText;
    tmp->SaveToFile(Path + "copy_task_6.txt");
    return 0;
}
//---------------------------------------------------------------------------
а по хорошему - надо Вашу версию билдера знать: в RAD Studio, где присутствует модуль IOUtils, все проще делается...
1
0 / 0 / 0
Регистрация: 05.11.2020
Сообщений: 14
06.11.2020, 06:49  [ТС]
Это слишком круто. Видите как написан мой код, почти что как по учебнику. Считайте нужны школьные знания c++. Требования такие, ничего не поделаешь.
Скажите лучше, как мне в моем коде посчитать длину слова, затем сравнить его с условием L, записать его в массив, если удовлетворяет условию. Затем обнулить счётчик длины слова и что б он продолжил считать строку
0
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
06.11.2020, 07:11
Цитата Сообщение от SkremBler Посмотреть сообщение
нужны школьные знания c++
Тогда и надо обращаться в соответствующий раздел... В Билдере, конечно, никто не мешает работать с текстовыми файлами в стиле чистого С++, но если есть родные методы, более удобные и понятные - почему ими не воспользоваться?
0
0 / 0 / 0
Регистрация: 05.11.2020
Сообщений: 14
06.11.2020, 17:10  [ТС]
Помогите, пожалуйста, реализовать следующие действия. Основной код программы вверху. Здесь представлены мои мысли, но я не знаю как их реализовать. Я начинающий кодописатель, пожалуйста постарайтесь объяснять на максимально простом языке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    printf("***************************************************\n");
    printf("Удаление слова длиной L\n");
    printf("***************************************************\n");
    printf("Введите значение длинны слова: L = ");
    scanf("%i", &L);
 
    for (int i = 0; i < size; i++) { //поэлементная проверка строки
        if (str[i] != ' ') {         //если элемент строки не пробел, то запоминаем его в count
            count++;
        }
        if(str[i] == ' '){     //если след. проверяемый элемент строки является пробелом, то значит слово закончилось
                               //и нужно его длинну сравнить с условием L
         if(count < L){        //собственно само сравнение
          //сюда надо вписать заполнение массива словами, если длина слова count меньше чем заданная L
          //как это реализовать?
          }
         //затем нужно обнулить счётчик и начать считать следующее слово, то есть прибавлять count заново
         //вопрос как это реализовать?
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2020, 17:10
Помогаю со студенческими работами здесь

Переформировать строки файла на заданную пользователем длину
Переформировать строки файла на заданную пользователем длину. Если длинна строки больше заданной то сделать перенос на следующую строку.

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

Cкопировать строки текстового файла F, превышающие заданную длину, в текстовый файл G
Cкопировать строки текстового файла F, превышающие заданную длину, в текстовом файле G.

Строки. Определить длину строки, содержится ли в ней слово «мир», является ли строка перевертышем
Вводится произвольная строка символов. Определить 1)количество символов данной строки; 2)содержится или нет в данной строке слово...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru