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

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

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

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

22.05.2013, 22:49. Просмотров 379. Ответов 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 строчки, ну ето в принцепи неважно, дело в том что оно недействует, просто перезаписывает все так же в новый текстовый документ
подскажите что не так или где у меня ошибка и ище я не уверен в правильности того что я делаю с табуляцией и переходом на новую строку, оно вопще надо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 22:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очистить текст от всяких знаков припинания (C++):

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

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

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

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

Преобразовать текст путем замены запятыми всех двоеточий и точками всех восклицательных знаков - C++
C++ Даны две строки произвольного текста. Известно, что среди символов в каждой строке имеются хотя бы две буквы «m». Составить процедуру,...

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

4
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
22.05.2013, 23:54 #2
итернал, логическое или || замените на && иначе такое условие всегда верно. Ещё иожно бы воспользоваться функцией int ispunct(int) библиотеки <ctype.h>(там ещё много подобных методов)). К целому чар нужно привести явно:
C++
1
2
char ch=',';
if(ispunct((int)ch))/*..что-то...*/;
1
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
23.05.2013, 00:42  [ТС] #3
все получилось, вышло и с заменой на && а можно убрать как-то переход на новую строку?
0
DU
1483 / 1129 / 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;
}
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
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'){
смелее и больше творчества, итернал
1
23.05.2013, 01:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 01:06
Привет! Вот еще темы с ответами:

Окно Windows/Linux на с++ без всяких api - C++
Основная суть вопроса в заголовке.теперь пояснения. Как сделать окно на чистом С++без всяких opengl,winapi просто имея Пакет языка с++ и...

Подсчет знаков припинания - Java SE
Решение нужно без регулярок и патерных конструкция... Простая лабороторная работа в универе, а я запарился. Нужно сделать программу,...

После пробелов, знаков припинания все буквы сделать заглавными - C#
Всем привет, прошу прощения если была уже такая тема. Задача в следующем: дан текст(Мама мыла раму). Задача, чтобы после пробелов, знаков...

Дан текст из букв и знаков. Подсчитать общее количество цифр и знаков ‘+’,’-‘,’*’, входящих в текст - Delphi
МНОЖЕСТВА.. Дан текст из букв и знаков. Подсчитать общее количество цифр и знаков ‘+’,’-‘,’*’, входящих в текст.


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

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

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