Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 6
1

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет

07.04.2017, 20:59. Просмотров 2152. Ответов 10
Метки нет (Все метки)

Выполните задания с использованием библиотечного класса string.

Даны строка S. Необходимо после каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет. (Например, "Улица.Аптека. Фонарь" → "Улица. Аптека. Фонарь").
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 20:59
Ответы с готовыми решениями:

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло",...

Создать список из целых чисел. После каждого элемента, равного "х" вставить элемент, равный "у"
Задача со стеком. Создать список из целых чисел. После каждого элемента,равного х вставить...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

10
Эксперт С++
1584 / 914 / 777
Регистрация: 06.02.2016
Сообщений: 2,398
Записей в блоге: 28
07.04.2017, 21:24 2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main(){
    setlocale(LC_ALL,"RUS");
    string s{"Улица.Аптека. Фонарь"};
    regex e("([[:punct:]])(\\S)");
    cout<<regex_replace(s,e,"$1 $2");
    return 0;
}
Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main(){
    setlocale(LC_ALL,"RUS");
    string s{"Улица.Аптека. Фонарь"};
    regex e("([[:punct:]])(?=\\S)");  //    regex e("([[:punct:]])(?!\\s)");
    cout<<regex_replace(s,e,"$1 ");
    return 0;
}
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
07.04.2017, 21:28 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
    setlocale(0, "");
    string str = "Улица.Аптека. Фонарь;";
    for (int i = 0; i < str.size(); ++i)
    {
        if (i != str.size() - 1)
        {   
            if ((str[i] == '.' || str[i] == ',' || str[i] == ';') && str[i + 1] != ' ')
                str.insert(i + 1, 1, ' ');
        }
        else if (str[i] == '.' || str[i] == ',' || str[i] == ';')
            str.push_back(' ');
    }
    cout << str;
0
515 / 390 / 239
Регистрация: 24.02.2017
Сообщений: 1,401
07.04.2017, 22:44 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <string.h>
 using namespace std;
 
int main()
{
 
string s="aaaa.sssss, ddddd;hhhh";
int pos=0;
  for(pos;pos<s.length();pos++)
  {
  if(s[pos]=='.'|| s[pos]==','|| s[pos]==';' )
  if( s[pos+1]!=' ')
  s.insert(pos+1," ");
 
  }
    cout<<s<<"\n";
system("pause");
    return 0;
}
0
(80 / 20 || 50 / 50) = x
1686 / 1153 / 440
Регистрация: 16.08.2014
Сообщений: 4,841
Записей в блоге: 1
07.04.2017, 23:13 5
nvc,
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 <string>
 
int main(int argc, char* argv[] )
{
    std::string s("Улица.Аптека. Фонарь.");
    std::string::iterator it, itNext;
 
    for (it = s.begin(); it != s.end(); it++)
    {
        itNext = it + 1;
 
        switch(*it)
        {
        case '.':
        case ',':
        case ';':
            if (itNext != s.end() && *itNext != ' ')
                it++ = s.insert(itNext, ' ');
        }
    }
 
    return 0;
}
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
07.04.2017, 23:25 6
повар1, твой код выйдет за границу строки, если знак препинания, после которого нужно вставить пробел, будет в конце сроки.
_stanislav, твой код после последней точки не вставляет пробел.
0
(80 / 20 || 50 / 50) = x
1686 / 1153 / 440
Регистрация: 16.08.2014
Сообщений: 4,841
Записей в блоге: 1
07.04.2017, 23:30 7
Цитата Сообщение от nd2 Посмотреть сообщение
твой код после последней точки не вставляет пробел
так и должно быть.
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
07.04.2017, 23:34 8
Цитата Сообщение от _stanislav Посмотреть сообщение
так и должно быть.
Может быть, но не по заданию:
Цитата Сообщение от nvc Посмотреть сообщение
Необходимо после каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет.
0
(80 / 20 || 50 / 50) = x
1686 / 1153 / 440
Регистрация: 16.08.2014
Сообщений: 4,841
Записей в блоге: 1
07.04.2017, 23:44 9
Цитата Сообщение от nd2 Посмотреть сообщение
Сообщение от nvc
Необходимо после каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет.
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 <string>
 
int main(int argc, char* argv[] )
{
    std::string s("Улица.Аптека. Фонарь.");
    std::string::iterator it, itNext;
 
    for (it = s.begin(); it != s.end(); it++)
    {
        itNext = it + 1;
 
        switch(*it)
        {
        case '.':
        case ',':
        case ';':
            if (itNext == s.end() || *itNext != ' ')
                it++ = s.insert(itNext, ' ');
        }
    }
 
    return 0;
}
1
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
08.04.2017, 00:37 10
C++
1
2
3
4
5
6
7
8
9
10
 
    setlocale(0, "");
    string str = "Улица.Аптека. Фонарь;";
    for (int i = 0; i < str.size(); ++i)
    {
        if ((str[i] == '.' || str[i] == ',' || str[i] == ';') 
                    && (i + 1 == str.size() || str[i + 1] != ' '))
            str.insert(i + 1, 1, ' ');
    }
    cout << str;
0
2207 / 1717 / 858
Регистрация: 21.12.2010
Сообщений: 3,053
Записей в блоге: 11
09.04.2017, 18:00 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
 
int main() 
{
    std::string str;
    std::getline(std::cin, str);
    std::string punc(",.;");
    for (int i = 0; i < str.size(); ++i)
    {
        if (punc.find(str.at(i)) != std::string::npos && (i == str.size() - 1 || str.at(i + 1) != ' '))
        {
            str.insert(i + 1, 1, ' ');
        }
    }
 
    std::cout << str << "DONE" << std::endl;
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2017, 18:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

Определить длину каждого слова строки, и если она четная, то вставить в середину слова "aa", иначе "а"
Помогите с программой, начал делать, ерунда какая то выходит.... #include&lt;iostream.h&gt;...

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его
Дана строка, в котором есть слово &quot;да&quot; или слово &quot;нет&quot;. Если в нем есть слово &quot;нет&quot;, то удалить его...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...


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

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

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