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

Работа с текстом - C++

Восстановить пароль Регистрация
 
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 16
09.06.2016, 00:39     Работа с текстом #1
Помогите, пожалуйста, исправить программу... Задание такое: Задан текст. По правилам пунктуации пробел может стоять после, а не перед каждым из следующих знаков: . , ; : ! ?. Проверить данный текст на соблюдение этих правил и при необходимости исправить.

Т.е. нужно:
1) оставить пробел между словами в предложении
2) если пробел стоит перед знаками . , ; : ! ? - удалить его
3) если перед знаками . , ; : ! ? нет пробела - добавить его

Программа работает,но неправильно - удаляет абсолютно все пробелы.

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
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include <string>
 
using namespace std;
 
string posle(".,;:!?)]}"); //по условию ЭТО после 
string pered = ("([{"); // ЭТО перед 
string probel = ("/s"); //пробел, табуляция, перевод строки 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string st = "Hbg vjg dh.Sljh fhg:   hedgv b.  Ffjns shja.";
    cout << endl << "Текст: " << st << endl;
    cout << endl << "Проверка текста на соблюдение пунктационных правил... "  << endl;
    for (int i = st.length() - 2; i > 0; --i)
        if (st[i] == ' ' && (pered.find(st[i - 1] != string::npos) || posle.find(st[i + 1] != string::npos)))
            st.erase(i, 1);
    cout << endl << "Исправленный текст: " << st << endl;
    getchar();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2016, 00:39     Работа с текстом
Посмотрите здесь:

C++ работа с текстом
работа с текстом C++
C++ Работа с текстом
C++ работа с текстом с++
C++ Работа с текстом.
C++ Работа с текстом
C++ Работа с текстом
C++ Работа с текстом C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
09.06.2016, 02:55     Работа с текстом #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <string>
#include <cctype>
 
void space_format(std::string& s){
    std::string::size_type i;
    const std::string ds(".,;:!?");
 
    //удаление перед
    for(i = 1; i < s.length(); ){
        if((ds.find(s[i]) != std::string::npos) && isspace(s[i - 1])){
            if(i > 0){
                s.erase(--i, 1);
                continue;
            }
        }
        ++i;
    }
 
    //добавление после
    for(i = 0; i < (s.length() - 1); ++i){
        if((ds.find(s[i]) != std::string::npos) && !isspace(s[i + 1])){
            if(ds.find(s[i + 1]) == std::string::npos){
                ++i;
                s.insert(s.begin() + i, ' ');
            }
        }
    }
}
 
int main(void){
    std::string s = "A,B,C,D   .Bla-bla ,ok ! !   !\nZed ,zoo. Aaaa    ?Abcdef.";
    space_format(s);
    std::cout << s << std::endl;
    return 0;
}
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 16
09.06.2016, 16:04  [ТС]     Работа с текстом #3
Большое спасибо!
Yandex
Объявления
09.06.2016, 16:04     Работа с текстом
Ответ Создать тему
Опции темы

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