Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82

Обработка текста, разделяемого на слова

15.06.2011, 21:39. Показов 9126. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации(переносы не используються). Сформировать новый текст, который являеться результатом одного из следующих преобразований исходного текста: заменить заданное слово на другое слово столько раз, сколько оно встречаеться в тексте. Входные и выходные данные через файл. На экран ничего не выводить. Реализация в виде многомодульной структуры в несколько .cpp.

Помогите с заданием, а то не очень хочеться изза него из универа вылетать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2011, 21:39
Ответы с готовыми решениями:

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

Функции, обработка текста: Задан текст; напечатать слова, отличные от последнего слова
Здравствуйте, нужна программа работающая через функции. Условие: Задан текст. Напечатать все слова, отличные от последнего слова,...

Напечатать слова, которые отличны от последнего слова текста, предварительно удалив из слова последнюю букву
Дана последовательность содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами не менее...

32
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
19.06.2011, 22:17
Студворк — интернет-сервис помощи студентам
Да без проблем
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
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
 
// функция по замене слов, захват символов буквы и цифры - isalnum
void str_replace(std::string&  str, const char*  rep, const char*_new) {
        int first = 0;
        int kolichestvo= 0;
 
        //ПОдсчитываем количество заменяемых слов
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            else {    
             kolichestvo++; 
             first = last + strlen(rep);
            }
        }
 
        //Формируем новую строку 
        string new_slovo; 
        for (int i= 0; i<kolichestvo- 1; i++)
         new_slovo+=_new;       
 
        
        
        //заменяем 
        first = 0;
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            str.replace(last, strlen(rep), new_slovo);
            first = last + strlen(rep);
        }
}
 
 
 
 
int  main() {
 
   std::string  str = "";
 
   // открыть файл ввода
   FILE*  fp         = fopen("input.txt", "r");
   char b[512];
   while(! feof(fp) ) {
        fgets(b, 512, fp);
        str.append(b);
   }
   fclose(fp);
 
   // изменить слово на другое
   cout<< "Вводи слово, которое надо заменить и слово НА которое надо заменить"<< endl;
   string old_slovo, new_slovo;
   cin>> old_slovo>> new_slovo;
   str_replace(str, old_slovo.c_str(), new_slovo.c_str());
 
   // изменить слово на другое
//   str_replace(str, "sdfgsadg", "programmirovanie");
 
 
   // сохранить в файл 
   fp = fopen("print.txt", "w");
   fputs(str.c_str(), fp);
   fflush(fp);
   fclose(fp);
 
   // test
  //  puts(str.c_str());
}
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 22:33  [ТС]
kravam,
а еще у нас препод проверяет всегда пустой файл и пустой ввод. Можешь доделать, что если пустой файл, то прога на экран выводит сообщение, что файл пустой. И если пустой ввод(то есть я просто интерякаю вместо ввода слова) то прога тоже на экран выводит типо "слово не введено". И еще проверка. Препод любит вводить дофига много символов. И есть какой то предел когда прога просто вылетает. Можешь сделать какой то определенный лимит слов? Если лимит будет превышен, то прога выводит на экран, что лимит символов превышен. Я знаю что уже достал тебя своими просьбами но помоги, пожалуйста!

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

Добавлено через 7 минут
Да. Если ввести 4 слова, то на выходе в каждом по три слова.То бишь одно теряется.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
19.06.2011, 22:35
Цитата Сообщение от Витька Посмотреть сообщение
обавлено через 1 минуту
а теперь выводиться в выходной файл два слова, хотя в тексте слов три.
а ты так сделай:
C++
1
2
3
        string new_slovo; 
        for (int i= 0; i<kolichestvo; i++)
         new_slovo+=_new;
И всё будет круто
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 22:50  [ТС]
ураааа теперь все робит. А по поводу проверок?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
30.06.2011, 22:00
Чё должно получиться из этого?

C++
1
2
3
123 sdfgsadg 23523 safsdffs, asdljgnsad
sdfgsadg djg7fdg glg9?ldfkng,
fdgdfbfg sdfgsadg kjdfsbg.
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
30.06.2011, 22:21  [ТС]
123 gogogo 23523 safsdffs, asdljgnsad
gogogo djg7fdg glg9?ldfkng,
fdgdfbfg gogogo kjdfsbg.
если вместо sdfgsadg вставить go.

Добавлено через 1 минуту
входной:
qwe qwe qwe
замена слов:
qw на 123
выходной:
исходного слова не существует.
(qw это же часть слова а не все слова а рпога должна реагировать на слова. то есть на то што разделяется) пробелом тире или знаками препинания.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
30.06.2011, 23:18
Тестируй
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
96
97
98
#include <stdio.h>
#include <string>
#include <iostream>
//#include <string.h>
using namespace std;
 
// функция по замене слов, захват символов буквы и цифры - isalnum
bool str_replace(std::string&  str, const char*  rep, const char*_new) {
        int first = 0;
        int kolichestvo= 0;
 
        int i= 0;
 
        //ПОдсчитываем количество заменяемых слов
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            else {    
             if (!isalnum    (  str [last+ strlen(rep)])) {
              if (last) {
               if (!isalnum(str[last- 1])) {
                kolichestvo++; 
                first = last + strlen(rep);
               }
              }
              else {
                 kolichestvo++; 
               i++;
               first = last + strlen(rep);
              }
             }
             else {
              first+= strlen(rep);
             }
            }
        }
        if (!i) return false;
 
        //Формируем новую строку 
        string new_slovo; 
        for (int i= 0; i<kolichestvo; i++)
         new_slovo+=_new;       
 
        
        
        //заменяем 
        first = 0;
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            str.replace(last, strlen(rep), new_slovo);
            first = last + strlen(rep);
        }
 
        return true;
}
 
 
 
 
int  main() {
 
   std::string  str = "";
 
   // открыть файл ввода
   FILE*  fp         = fopen("input.txt", "r");
   char b[512];
   while(! feof(fp) ) {
        fgets(b, 512, fp);
        str.append(b);
   }
   fclose(fp);
 
   // изменить слово на другое
//   cout<< "Вводи слово, которое надо заменить и слово НА которое надо заменить"<< endl;
//   string old_slovo, new_slovo;
//   cin>> old_slovo>> new_slovo;
//   str_replace(str, old_slovo.c_str(), new_slovo.c_str());
 
//    изменить слово на другое
//   str_replace(str, "sdfgsadg", "programmirovanie");
//    изменить слово на другое
   if (!str_replace(str, "qw", "123")) {
    cout<< "fig tebe a ne slovo"<< endl;
    getchar ();
   }
 
   // сохранить в файл 
   fp = fopen("print.txt", "w");
   fputs(str.c_str(), fp);
   fflush(fp);
   fclose(fp);
 
   // test
  //  puts(str.c_str());
}
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
30.06.2011, 23:30  [ТС]
"fig tebe a ne slovo"
а как вывести это в файл?
и еще. это слово появляется каждый раз хоть верное решение, хоть не верное...

Добавлено через 1 минуту
if (!str_replace(str, "qw", "123"))
а в этой строчке. там ведь может быть не только qw и 123.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
30.06.2011, 23:38
на чём прокалываешься?
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
30.06.2011, 23:49  [ТС]
всмысле?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
30.06.2011, 23:53
Я же сказал: тестируй. Дай исходные данные на которых ты прокалываешься.
0
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
01.07.2011, 00:02  [ТС]
ааааа. ну я тестил так.
1) входной - пустой
ввод - любые символы.
на экране появляеться "фиг тебе а не слово"
выходной - пустой.
хотя тут ничего не должно быть. надпись фиг тебе а не слово должна появляться тогда, когда мы пытаемся заменить часть слова.
2) входной - 123 123 123
ввод - 123 d
на экране появляеться "фиг тебе а не слово"
выходной - ddd ddd ddd
все верно, только вот на экране эта надпись не должна появляться.
3)входной - 123 123 123
ввод - 12 d
на экране появляеться "фиг тебе а не слово"
выходной - 123 123 123
вот здесь в выходном файле должно быть "фиг тебе а не слово". а на экране эта надпись появлятся не должна.

Добавлено через 57 секунд
кароче в 1 случае все норм. только на экране надпись появляться не должна.

Добавлено через 36 секунд
надпись походу для всех случаев появляеться. а должна ток для последнего. и ее надо в файл кидать, а на экран не выводить
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
01.07.2011, 00:08
Взялся было правиь случай номер 2, как самый проблематичный, но никакой надписи в упор не вижу. Скинь тогда уж сразу файл с данными, может я ввожу чё не так. Но это потом, а щас спать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2011, 00:08

Вывести на экран те слова, которые отличны от последнего слова текста и первая буква этого слова входит в него еще раз
Помогите, пожалуйста, с заданием. Что-то туговато у меня идет работа со строками. Более менее я нашел последнее слово, а дальше не...

Презентация собственной реализации Разделяемого Указателя (shared_ptr)
Пришлось самому реализовывать эквивалентный shared_ptr класс, так как на винде стала повреждена библиотека языка C. Времени на...

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

Ввод текста, обработка и вывод текста в то же поле
Здравствуйте!Как сделать в delphi 10 seattle нечто вроде экспертных систем?Вводим текст (типа как в консоли), обрабатываем его, и выводим...

Обработка текста - извлечение текста в кавычках
Доброго времени суток. У меня есть код void select(WideString FileName) { if (!(FileName.IsEmpty())) { TStringList * IN_SL =...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru