Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
#1

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

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

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

Помогите с заданием, а то не очень хочеться изза него из универа вылетать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 21:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка текста, разделяемого на слова (C++):

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

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

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

Задан текст, напечатать слова этого текста отличные от последнего слова - C++
Задан текст.напечатать слова этого текста отличные от последнего слова удалить в каждом из них первую букву. Нужно сделать именно через...

Вывести все слова текста, которые отличны от последнего слова, предварительно преобразовав их - C++
Решить задачу на обработку текста, используя функции работы со строками. Предполагается, что исходным является текстовый файл. В текст...

Дана строка текста, в которой слова разделены пробелами и запятыми, вывести повторяющиеся слова - C++
Помогите пожалуйста! Как мне найти и вывести повторяющиеся слова? П.С. При работе со строками не использовать указатели. Строки...

32
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 20:21  [ТС] #16
Цитата Сообщение от kravam Посмотреть сообщение
xAtom,почему не
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
#include <stdio.h>
#include <string>
 
// функция по замене слов, захват символов буквы и цифры - isalnum
void str_replace(std::string&  str, const char*  rep, const char*_new) {
        int first = 0;
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            str.replace(last, strlen(rep), _new);
            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);
 
   // изменить слово на другое
   str_replace(str, "sdfgsadg", "programmirovanie");
 
   // сохранить в файл 
   fp = fopen("print.txt", "w");
   fputs(str.c_str(), fp);
   fflush(fp);
   fclose(fp);
 
   // test
  //  puts(str.c_str());
}
?
А можно сделать, чтобы пользователь вручную вводил какое слово заменить и на какое слово заменить. И еще. Слово должно заменяться столько раз, сколько оно повторяеться в тексте. То есть если брать этот пример,
123 sdfgsadg 23523 safsdffs, asdljgnsad
sdfgsadg djg7fdg glg9?ldfkng,
fdgdfbfg sdfgsadg kjdfsbg.
то результат должен быть такой:
123 programmirovanieprogrammirovanieprogrammirovanie 23523 safsdffs, asdljgnsad
programmirovanieprogrammirovanieprogrammirovanie djg7fdg glg9?ldfkng,
fdgdfbfg programmirovanieprogrammirovanieprogrammirovanie kjdfsbg.
так как слово sdfgsadg встречается в тексте 3 раза.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.06.2011, 21:16 #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
#include <windows.h>
#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;
        while(1) {
            int last = str.find(rep, first);
            if(last == std::string::npos)
                break;
            str.replace(last, strlen(rep), _new);
            first = last + strlen(rep);
        }
}
 
 
 
 
int  main() {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
   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());
 
   // сохранить в файл 
   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, 21:19  [ТС] #18
а можно без библиотеки windows.h, а только стринг иострим и стдио оставить?
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.06.2011, 21:22 #19
Можно, она только для русского языка, убирай её и
C++
1
2
SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
Но у тебя будут кракозябры.
1
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 22:01  [ТС] #20
все ясно. спасибо. я транслитом напишу))) спасибо ооогромнющееее

Добавлено через 12 минут
аааааа
оно все равно заменят одно слово на одно!!!
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.06.2011, 22:17 #21
Да без проблем
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  [ТС] #22
kravam,
а еще у нас препод проверяет всегда пустой файл и пустой ввод. Можешь доделать, что если пустой файл, то прога на экран выводит сообщение, что файл пустой. И если пустой ввод(то есть я просто интерякаю вместо ввода слова) то прога тоже на экран выводит типо "слово не введено". И еще проверка. Препод любит вводить дофига много символов. И есть какой то предел когда прога просто вылетает. Можешь сделать какой то определенный лимит слов? Если лимит будет превышен, то прога выводит на экран, что лимит символов превышен. Я знаю что уже достал тебя своими просьбами но помоги, пожалуйста!

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

Добавлено через 7 минут
Да. Если ввести 4 слова, то на выходе в каждом по три слова.То бишь одно теряется.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.06.2011, 22:35 #23
Цитата Сообщение от Витька Посмотреть сообщение
обавлено через 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  [ТС] #24
ураааа теперь все робит. А по поводу проверок?
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
30.06.2011, 22:00 #25
Чё должно получиться из этого?

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  [ТС] #26
123 gogogo 23523 safsdffs, asdljgnsad
gogogo djg7fdg glg9?ldfkng,
fdgdfbfg gogogo kjdfsbg.
если вместо sdfgsadg вставить go.

Добавлено через 1 минуту
входной:
qwe qwe qwe
замена слов:
qw на 123
выходной:
исходного слова не существует.
(qw это же часть слова а не все слова а рпога должна реагировать на слова. то есть на то што разделяется) пробелом тире или знаками препинания.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
30.06.2011, 23:18 #27
Тестируй
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  [ТС] #28
"fig tebe a ne slovo"
а как вывести это в файл?
и еще. это слово появляется каждый раз хоть верное решение, хоть не верное...

Добавлено через 1 минуту
if (!str_replace(str, "qw", "123"))
а в этой строчке. там ведь может быть не только qw и 123.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
30.06.2011, 23:38 #29
на чём прокалываешься?
0
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
30.06.2011, 23:49  [ТС] #30
всмысле?
0
30.06.2011, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 23:49
Привет! Вот еще темы с ответами:

Напечатать все слова из текста, отличные от слова hello. - C++
Добрый день товарищи!!!Выручайте!)Зачет по программированию завтра сдавать,а я не знаю как последнюю лабораторку сделать. Задание...

С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву в начало слова; - C++
С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву...

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Обработка текста - C++
Добрый день! В общем имеется программа, которая считывает из файла текст, в файле есть слова, записанные со знаком &quot;-&quot; переноса, как...


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

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

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