Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
15.06.2011, 21:39     Обработка текста, разделяемого на слова #1
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации(переносы не используються). Сформировать новый текст, который являеться результатом одного из следующих преобразований исходного текста: заменить заданное слово на другое слово столько раз, сколько оно встречаеться в тексте. Входные и выходные данные через файл. На экран ничего не выводить. Реализация в виде многомодульной структуры в несколько .cpp.

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

Напечатать все слова из текста, отличные от слова hello. C++
Обработка текста, разделяемого на слова C++
C++ С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву в начало слова;
C++ Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию
Задан текст, напечатать слова этого текста отличные от последнего слова C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.06.2011, 21:50     Обработка текста, разделяемого на слова #2
Дай текст, слово и на что его заменить.
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
15.06.2011, 22:36  [ТС]     Обработка текста, разделяемого на слова #3
текст любой, состоящий из любых символов. слово задает пользователь на экране. то есть прога должна спросить: введите слово. слово также может быть любой символ или набор символов. затем прога спрашивает на какое слово вы хотите заменить. точно также вводишь слово любое. и потом прога заменяет второе слово на первое слово столько раз, сколько онов встречаеться в тексте. то есть если слово встречаеться в тексте 3 раза, то вместо первого слова в тексте появляються три вторых. и так с каждым первым словом. ну и вывод нового текста тоже в файл. вот. помогииии))
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.06.2011, 23:06     Обработка текста, разделяемого на слова #4
Ну мне лень пример для тестирования кропать, давай чё я просил.
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
15.06.2011, 23:09  [ТС]     Обработка текста, разделяемого на слова #5
123 sdfgsadg 23523 safsdffs, asdljgnsad
sdfgsadg djg7fdg glg9?ldfkng,
fdgdfbfg sdfgsadg kjdfsbg.


слово sdfgsadg заменить на слово programmirovanie
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.06.2011, 23:28     Обработка текста, разделяемого на слова #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
 
int main()
{
    std::string word, new_word, text;
    std::cout << "Enter word:\n";
    std::getline(std::cin, word, '\n');
    std::cout << "Enter new word:\n";
    std::getline(std::cin, new_word, '\n');
    std::ifstream ifile("input.txt");
    std::getline(ifile, text, '\n');
    std::regex reg(word);
    text = std::regex_replace(text, reg, new_word);
    std::ofstream ofile("output.txt");
    ofile << text;
    return 0;
}
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
15.06.2011, 23:40  [ТС]     Обработка текста, разделяемого на слова #7
#include <regex>
а без этой библиотеки нельзя?? просто мы такую не проходили на первом курсе.

Добавлено через 54 секунды
а как сделать штобы несколько файлов cpp было?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.06.2011, 23:41     Обработка текста, разделяемого на слова #8
Цитата Сообщение от Витька Посмотреть сообщение
#include <regex>
а без этой библиотеки нельзя?? просто мы такую не проходили на первом курсе.
учеба в ВУЗе - это самообучение
Цитата Сообщение от Витька Посмотреть сообщение
просто мы такую не проходили на первом курсе.
сомневаюсь что про такое даже на 4 курсе расскажут)
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
16.06.2011, 00:15  [ТС]     Обработка текста, разделяемого на слова #9
а как сделать в несколько файлов?

Добавлено через 3 минуты
блин эта прога уж очень очень замудрена. прям вообще. а можешь как нибудь подоступнее написать? не используя все таки библиотеку regex?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2011, 00:27     Обработка текста, разделяемого на слова #10
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
#include <algorithm>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iterator>
#include <vector>
 
int main()
{   
    std::string text, tmp, word, new_word;
    std::ifstream ifile("1.txt");
    std::getline(ifile, text, '\n');
    std::stringstream ss(text);
    std::vector<std::string> text_vec;
    while(ss >> tmp)
    text_vec.push_back(tmp);
    std::copy(text_vec.begin(), text_vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    std::cout << "Enter word:\n";
    std::getline(std::cin, word, '\n');
    std::cout << "Enter new word:\n";
    std::getline(std::cin, new_word, '\n');
    std::for_each(text_vec.begin(), text_vec.end(), [&word, &new_word](std::string & str)
    {
    if(str == word)
        str = new_word;
    });
    std::ofstream ofile("2.txt");
    std::copy(text_vec.begin(), text_vec.end(), std::ostream_iterator<std::string>(ofile, " "));
    return 0;
}
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
16.06.2011, 00:46  [ТС]     Обработка текста, разделяемого на слова #11
вся фишка в том што тут работа библиотек. а у нас такая тема, што нужно работать с текстом. то есть работа с массивами, строками, списками и вот тому подобное. то есть использовать стандартные библиотеки иострим ну библиотеку ввода вывода типа фстрим и все. ну может по мелочи еще што. но не такие масштабные. вот.

Добавлено через 3 минуты
ну и плюс разбиение на отдельные модули - файлы .срр . Как бэ прога сборка)))
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 03:52     Обработка текста, разделяемого на слова #12
C++
1
2
3
4
5
6
7
8
9
10
11
// myfile.cpp
int f() {
  //....
}
 
//main.cpp
//....
#include "myfile.cpp"
//...
int x = f();
//...
не понял, в чем проблема?
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
16.06.2011, 13:54  [ТС]     Обработка текста, разделяемого на слова #13
ну в том што я нифига не рублю в C++))) Пытаюсь разбирать и учить, но пока как то медленно двигаюсь.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.06.2011, 14:10     Обработка текста, разделяемого на слова #14
Не надо регулярки использовать объект string в полне справиться с любой задачей с текстом.

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
#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;
        if( ! last) 
        goto jump;
        if( ! isalnum(str.at(last - 1)) ) {
jump:
             if(! isalnum(str.at( last + strlen(rep)) ) ) 
           str.replace(last, strlen(rep), _new);
         }
         first = last + strlen(rep);
    }
}
 
 
 
 
void  main() {
 
   std::string  str = "";
 
   // открыть файл ввода
   FILE*  fp         = fopen("X:\\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("X:\\print.txt", "w");
   fputs(str.c_str(), fp);
   fflush(fp);
   fclose(fp);
 
   // test
  //  puts(str.c_str());
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.06.2011, 17:51     Обработка текста, разделяемого на слова #15
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());
}
?
Витька
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 раза.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 21:19  [ТС]     Обработка текста, разделяемого на слова #18
а можно без библиотеки windows.h, а только стринг иострим и стдио оставить?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
19.06.2011, 21:22     Обработка текста, разделяемого на слова #19
Можно, она только для русского языка, убирай её и
C++
1
2
SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
Но у тебя будут кракозябры.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2011, 22:01     Обработка текста, разделяемого на слова
Еще ссылки по теме:

C++ Обработка текста
Дана строка текста, в которой слова разделены пробелами и запятыми, вывести повторяющиеся слова C++
C++ Напечатать слова, которые отличны от последнего слова текста, предварительно удалив из слова последнюю букву

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

Или воспользуйтесь поиском по форуму:
Витька
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 82
19.06.2011, 22:01  [ТС]     Обработка текста, разделяемого на слова #20
все ясно. спасибо. я транслитом напишу))) спасибо ооогромнющееее

Добавлено через 12 минут
аааааа
оно все равно заменят одно слово на одно!!!
Yandex
Объявления
19.06.2011, 22:01     Обработка текста, разделяемого на слова
Ответ Создать тему
Опции темы

Текущее время: 05:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru