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

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

Войти
Регистрация
Восстановить пароль
 
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 312
Завершенные тесты: 1
#1

Очистить текст от всяких знаков припинания - C++

22.05.2013, 22:49. Просмотров 349. Ответов 4
Метки нет (Все метки)

подскажите пожалуйста, мне необходимо очистить текст от всяких знаков припинания и так далее
вот как я делаю
текст получается я беру из файла
C++
1
2
3
4
5
6
7
8
    FILE *f;
    string bs,t;
    f=fopen("input.txt","r");
    while(!feof(f))
    {
        bs+=fgetc(f);
    }
    fclose(f);
потом ету строку передаю в метод класа
вот код самого метода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void CFWork::ClearText(string s)
{
    string k;
    for( int i=0;i<s.length();i++)
    {
        if(s.at!=' ' || s.at!='?' || s.at!=',' || s.at!='.' || s.at!='!' ||s.at!=';' || s.at!=':' || s.at!='-' || s.at!='\t' || s.at!='\r\n')
        {
            k+=s.at(i);
        }
    }
    FILE *f;
    f=fopen("input1.txt","w");
    fprintf(f,"%s", k.c_str());
    fclose(f);
}
и оно по идее должно создать txt файл уже без всяких знаков и тд и тп
текст взял с википедии там 4 строчки, ну ето в принцепи неважно, дело в том что оно недействует, просто перезаписывает все так же в новый текстовый документ
подскажите что не так или где у меня ошибка и ище я не уверен в правильности того что я делаю с табуляцией и переходом на новую строку, оно вопще надо?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 22:49     Очистить текст от всяких знаков припинания
Посмотрите здесь:

Очистить текст от символов кроме букв и пробелов - C++
Как реализовать исходя из задания данного в заголовке, приведенным ниже способом? 1. Взять очередной символ в тексте 2. Если это...

Прочесть текст из файла и вывести предложение, содержащее максимальное количество знаков пунктуации - C++
Здравствуйте, уважаемый программисты!!! У меня проблема в создании консольной задачи на си++ Надо создать программу, которая считывает...

Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,*,- - C++
дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,*,-. группой букв называют такую...

Определить количество вхождений строки из n знаков в строку из k знаков - C++
Всем доброй ночи ребят. Вы последняя надежда:( помогите пожалуйста 2 задачи решить последняя ночь( сразу препод говорил, что контрольную...

Програма которая считутет текст с файла и виводит на екран предложения которая имеет найбольше количество знаков пробелов. - C++
Кто может дописать код дальше у меня что то не выходит буду очень благодарен. Задание: Написать програму которая считутет текст с...

Использование команды system(); Без всяких окон (без dos и т.д) - C++
Вообще реально сделать чтобы обратиться к системе в фоновом режиме. Без отрытия dos. Без всякой командной строки. Просто чтоб запускал...

Очистить поток - C++
Хотел с помощью куска кода (см.ниже) очистить буфер связанный с потоком cin. Но выражение в скобках по какой-то причине не изменяется? ...

Очистить файл - C++
Здравствуйте Перед использованием нужно очистить файл..он 100% будет не пустой в данной ветке std::cout&lt;&lt;&quot;input new pass&quot;; ...

Очистить файл - C++
Как через класы потоков очистить открытый файл? 32 строка вроде ф-ция для очистки, но она не очищает файл. #include &lt;fstream&gt; #include...

Очистить экран - C++
Как отчистить экран в с++ ????


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,325
Записей в блоге: 3
22.05.2013, 23:54     Очистить текст от всяких знаков припинания #2
итернал, логическое или || замените на && иначе такое условие всегда верно. Ещё иожно бы воспользоваться функцией int ispunct(int) библиотеки <ctype.h>(там ещё много подобных методов)). К целому чар нужно привести явно:
C++
1
2
char ch=',';
if(ispunct((int)ch))/*..что-то...*/;
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 312
Завершенные тесты: 1
23.05.2013, 00:42  [ТС]     Очистить текст от всяких знаков припинания #3
все получилось, вышло и с заменой на && а можно убрать как-то переход на новую строку?
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2013, 00:42     Очистить текст от всяких знаков припинания #4
а еще можно заюзать алгоритмы из стандартной библиотеки:
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
#include <algorithm>
#include <iostream>
#include <string>
#include <cctype>
 
bool NeedRemove(char ch)
{
  return ispunct(ch)
      || isspace(ch)
      // other checks
      ;
}
 
void ClearText(std::string& str)
{
  std::string::iterator newEnd = std::remove_if(str.begin(), str.end(), &NeedRemove);
  str.erase(newEnd, str.end());
}
 
int main()
{
  std::string str = "123,!df.-d\nsd? dsxxx\r\ndd12";
  std::cout << "before: = " << str << std::endl;
  ClearText(str);
  std::cout << "after:  = " << str << std::endl;
  return 0;
}
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,325
Записей в блоге: 3
23.05.2013, 01:06     Очистить текст от всяких знаков припинания #5
DU, да можно не приводить, - само приводится)) Но символов за пределами 0-255 не переносит. Так вроде можно ещё:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include<string>
#include<ctype.h>
using namespace std;
int main()
{
setlocale (LC_CTYPE, "Russian");
string strToclean = "abs, def. gh! ikl>mn& oprs? абаба, галама! га?";
string strCleaned;
for(size_t i=0; i<strToclean.size(); ++i){
if(strToclean[i]<0||strToclean[i]>255){//фильтруем (пропускаем) не английские буквы, т.к. русских букв оно не ест(
strCleaned+=strToclean[i];
 
}else
if(!ispunct(strToclean[i])){
strCleaned+=strToclean[i];
}
}
cout<<strCleaned;
 cout << endl;
 system( "pause" ); 
return 0;
}
Добавлено через 8 минут
вот так переводы уберёт:
C++
1
2
else
if(!ispunct(strToclean[i])&&strToclean[i]!='\n'){
смелее и больше творчества, итернал
Yandex
Объявления
23.05.2013, 01:06     Очистить текст от всяких знаков припинания
Ответ Создать тему
Опции темы

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