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

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

Войти
Регистрация
Восстановить пароль
 
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
#1

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

09.06.2016, 00:39. Просмотров 159. Ответов 2
Метки нет (Все метки)

Помогите, пожалуйста, исправить программу... Задание такое: Задан текст. По правилам пунктуации пробел может стоять после, а не перед каждым из следующих знаков: . , ; : ! ?. Проверить данный текст на соблюдение этих правил и при необходимости исправить.

Т.е. нужно:
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++
Работа с текстом, функции fopen и fclose C++
работа с текстом без использования string C++
C++ Работа с текстом без String
C++ Работа с текстом, найти среднее арифметическое
C++ Файлы, меню, работа с текстом
C++ Работа с русским текстом в linux

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Геомеханик
534 / 341 / 258
Регистрация: 26.06.2015
Сообщений: 770
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
Сообщений: 26
09.06.2016, 16:04  [ТС]     Работа с текстом #3
Большое спасибо!
Yandex
Объявления
09.06.2016, 16:04     Работа с текстом
Ответ Создать тему
Опции темы

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