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

Работа с текстом. Объясните алгоритм если не сложно.. - C++

Восстановить пароль Регистрация
 
Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 18:25     Работа с текстом. Объясните алгоритм если не сложно.. #1
1. Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Удалить из этого файла фразы, содержащие предлоги «с», «на», «под».

Добавлено через 4 часа 36 минут
По типу такой задачи есть на форуме но там ничего дельного не сказанно(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 18:33     Работа с текстом. Объясните алгоритм если не сложно.. #2
нужно именно предлоги или те слова которые начинаются на «с», «на», «под»?
Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 18:39  [ТС]     Работа с текстом. Объясните алгоритм если не сложно.. #3
Удалить фразы содержащиее ТОЛЬКО предлоги с на под
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 18:46     Работа с текстом. Объясните алгоритм если не сложно.. #4
скорее это лингвистика, а не программирование. Здесь наверно нужно разбивать слово и проверять по словарю ведь русский язык очень богатый.

Не по теме:

Можно вопрос, а для каких целей разрабатывается данная программа?

Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 19:01  [ТС]     Работа с текстом. Объясните алгоритм если не сложно.. #5
Дана фраза до точки которая содержит слова. И если среди слов есть предлоги эти то удалить эту фразу.Может просто услови типа если ' ' и 'н' и 'a' и ' ' то удалять фразу? Эту задачку нашёл просто, хочу потренироваться, но не знаю как её сделать)
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
17.02.2011, 19:28     Работа с текстом. Объясните алгоритм если не сложно.. #6
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
#include<iostream>
#include<algorithm>
#include<vector>
#include<fstream>
#include<sstream>
#include<windows.h>
 
char c[256];
 
void print(std::string s){
    CharToOem(s.c_str(), c);
    std::cout<<c<<'.';
}
 
bool comp(char c){
    return (c<-64||c>-1)&&c!=-72&&c!=-88;
}
 
int main(){
    std::string path, s, s1, s2, d=" с  на  под С  На  Под";
    std::cout<<"Enter file path\n";
    getline(std::cin, path);
    std::fstream fs(path.c_str());
    if(!fs){std::cerr<<"File not found"; return 1;}
    std::vector<std::string> v, del, res;
    std::stringstream ss(d);
    while(ss>>d){
        del.push_back(d);
    }
    while(getline(fs, s, '.')){
        s2=s;
        std::replace_if(s.begin(), s.end(), comp, ' ');
        ss.clear();
        ss.str(s);
        while(ss>>s1){
            v.push_back(s1);
        }
        if(std::find_first_of(v.begin(), v.end(), del.begin(), del.end())==v.end()){
            res.push_back(s2);
        }
        v.clear();
    }
    fs.close();
    fs.open(path.c_str(), std::ios::out);
    for(int i=0; i<res.size(); i++){
        print(res[i]);
        fs<<res[i]<<'.';
    }
    fs.close();
}
no0ker
17.02.2011, 19:34
  #7

Не по теме:

считываем по 1 символу файл.
записываем их в массив 1.
как только встречаем символ 'с'.
заносим его в массив 2.
считываем дальнейший символ - если он пробел. то считываем символы из файла до ',' и очищаем массив 2.
если не пробел - данные массива 2. добавляем в массив 1.
считываем по 1 символу в массив 1....

в конце открываем файл в режиме чтения и записываем массив 1

пока писал текст алгоритма, уже код написали =)

Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 19:43  [ТС]     Работа с текстом. Объясните алгоритм если не сложно.. #8
igorrr37 Спасибо за кодбольшое буду разбираться попытаюсь на обычный си сделать
no0ker спасибо за алгоритм, очень полезно!
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
17.02.2011, 19:50     Работа с текстом. Объясните алгоритм если не сложно.. #9
Не стал заморачиваться з удалением.
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <windows.h>
 
void insert_space(std::string &str){
  const std::string delim(" ,.:;?!");
  for(std::string::value_type i = 0; i < str.length(); ++i)
    if(delim.find(str[i]) != std::string::npos)
      str[i] = ' ';
}
 
int main(){
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  std::ifstream fin("INPUT.TXT");
  const std::string find_pred = "с на под";
 
  while(!fin.eof()){
    std::string buffer, tmp;
    std::vector<std::string> words, preds;
    bool key = true;
 
    getline(fin, buffer, '.');
    insert_space(buffer);
    std::istringstream ist(buffer), _ist(find_pred);
 
    while(ist >> tmp)
      words.push_back(tmp);
    while(_ist >> tmp)
      preds.push_back(tmp);
 
    for(int i = 0; i < words.size(); ++i)
      for(int j = 0; j < preds.size(); ++j)
        if(words[i].find(preds[j]) != std::string::npos)
          key = false;
 
    if(key){
      for(int i = 0; i < words.size(); ++i)
        std::cout << words[i] << ' ';
    std::cout << '.';
    }
  }
  return 0;
}
Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 20:23  [ТС]     Работа с текстом. Объясните алгоритм если не сложно.. #10
А на обычный Си перевести не сложно будет? текстовые операторы такиеже там?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
17.02.2011, 20:24     Работа с текстом. Объясните алгоритм если не сложно.. #11
Цитата Сообщение от Kapioner Посмотреть сообщение
текстовые операторы такиеже там?
Нет...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2011, 21:36     Работа с текстом. Объясните алгоритм если не сложно..
Еще ссылки по теме:

Циклический алгоритм.пожалуйста напишите программу.и если не сложно блок-схему C++
C++ Посмотрите если не сложно

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

Или воспользуйтесь поиском по форуму:
Kapioner
 Аватар для Kapioner
1 / 1 / 0
Регистрация: 16.02.2011
Сообщений: 30
17.02.2011, 21:36  [ТС]     Работа с текстом. Объясните алгоритм если не сложно.. #12
плохо((

Добавлено через 5 минут
может кто помочь перевести в обычный си? буду премного благодарен
Yandex
Объявления
17.02.2011, 21:36     Работа с текстом. Объясните алгоритм если не сложно..
Ответ Создать тему
Опции темы

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