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

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

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

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

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

Работа с текстом - C++
Задача C++: Даны натуральное число n, символы s1 ...,sn.. Группы символов, разделенные пробелами (одним или несколькими) и не...

Файлы, работа с текстом - C++
Огромная просьба помочь!! Мне очень нужно написать программу, которая будет считывать текст из файла и копировать все слова длиной от l1 до...

Массив. Работа с текстом. - C++
В общем, задание такого: пользователь вводит Ф.И.О (неважно чьё) и программа должна вывести суммарное количество введенных букв, количество...

С++ работа с текстом из файла - C++
Народ помогите плиз !!! Надо прочитать текст из файла , для дальнейшей работы с ним (текстом) , т.е. надо записать весь текст в массив , у...

Работа с текстом (цвет) - C++
Всем привет! Подскажите пожалуйста как поменять цвет фона в консоли, чтобы вместо чорного экрана сделать что-то повеселее?

С++ работа с файлами и текстом - C++
Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается...

2
Геомеханик
667 / 473 / 334
Регистрация: 26.06.2015
Сообщений: 1,109
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;
}
1
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
09.06.2016, 16:04  [ТС] #3
Большое спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2016, 16:04
Привет! Вот еще темы с ответами:

Работа с русским текстом в linux - C++
Пишу консольное приложение в Code::Blocks на Ubuntu 15.04. Выводит он русский текст и без всяких функций, а вот с чтением проблема,...

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

Работа с текстом без String - C++
Слова текста из малых латинских букв записаны не менее чем через один пробел; текст заканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции...

Работа с текстом, функции fopen и fclose - C++
Друзья, помогите! Не могу понять в чём тут дело. я убрал поток и начал использовать функции fopen и fclose. Но при компиляции программа...


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

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

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