С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10

Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»

27.07.2022, 18:33. Показов 2247. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан текст-письмо, состоящий из одного или нескольких предложений на английском языке с
возможными лидирующими и концевыми пробелами.
Каждое предложение содержит слова, разделённые пробелами, начинается с большой буквы
и заканчивается точкой. Других знаков препинания в предложениях нет.
В письме могут встречаться имена собственные вида «Фамилия Имя Отчество». Других слов с
большой буквы кроме первого слова предложения и включений «Фамилия Имя Отчество» в
предложениях нет.
Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы».
Формат ввода: одна строка с исходным письмом.
Формат вывода: одна строка с откорректированным письмом.
Комментарий: данные примеров ввода и вывода располагаются в файлах в одну строку.
input.txt
Please convey my warm regards to
Ivanov Ivan Ivanovich.
output.txt
Please convey my warm regards
to Ivanov I.I.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2022, 18:33
Ответы с готовыми решениями:

Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»
Помогите пожалуйста решить задачу. Желательно не очень трудный код и с разбором. Заранее спасибо) Дан текст-письмо, состоящий из...

Ввести имя, отчество и фамилию через пробел. Преобразовать их к формату «фамилия-инициалы»
На языке С++

Сформировать из трех строк (фамилия, имя, отчество) одну строку, содержащую фамилию и инициалы
Здравствуйте! Ребят, помогите пожалуйста. Дано три строки, содержащие фамилию,имя, отчество. Сфор мировать из них одну строку,...

35
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
27.07.2022, 19:29
PELMENKA9183882,
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
  std::string source = "Please convey my warm regards to Ivanov Ivan Ivanovich.";
  std::cout << std::regex_replace(source, std::regex{R"((\b[A-Z]\w+\s)([A-Z])\w+\s([A-Z])\w+\.?)"}, "$1$2.$3.");
}
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10
27.07.2022, 19:56  [ТС]
Код рабочий но слишком медленный Time Limit
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
27.07.2022, 20:09
Цитата Сообщение от PELMENKA9183882 Посмотреть сообщение
но слишком медленный
Объект std::regex создаввай один раз, а не при каждом выхове regex_replace.
Там также есть перегрузки на итераторах, что позволит работать только с парой экземпляров строк без ненужной реаллокации.
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10
27.07.2022, 20:19  [ТС]
Да и в принципе вариант с regex не подходит ибо докопаются
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
27.07.2022, 20:29
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
37
38
39
40
41
42
43
44
45
#include <fstream>
 
int main()
{
    std::ifstream fin; fin.open("input.txt");
    std::ofstream fout; fout.open("output.txt");
    
    char c;
    while(!fin.eof())
        {
            c = fin.get();
            if(c != '\n' && c != '\t' && c != ' ')
                break;
        }
    if(!fin.eof())
        fout << c;
    while((c = fin.get()) != EOF)
    {
        if(isupper(c))
            {
                fout << c;
                while((c = fin.get()) != EOF)
                        {
                            fout << c;
                            if(c == '\n' || c == '\t' || c == ' ')
                                break;
                        }
                c = fin.get();
                fout << c << '.';
                while((c = fin.get()) != EOF)
                        if(c == '\n' || c == '\t' || c == ' ')
                            break;
                c = fin.get();
                fout << c << '.';
                while((c = fin.get()) != EOF)
                        if(c == '\n' || c == '\t' || c == ' ')
                            break;
            }
        else fout << c;
    }
    
    fin.close();
    fout.close();
    return 0;
}
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10
28.07.2022, 20:40  [ТС]
Прога выводит служебный символ что ломает чекер

Добавлено через 1 час 49 минут
Up!
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 02:41
Вот такая ещё имеет место беда. Поковыряться можно улучшить,
Проверяет несколько предложений.Поздно, баюшки пора вообщем.

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
#include <fstream>
 
int main()
{
    std::ifstream fin; fin.open("input.txt");
    std::ofstream fout; fout.open("output.txt");
 
    char c; int count(0);  int count_n(0);
    while (!fin.eof())
    {
        c = fin.get(); ++count;
if (count > 2 && isupper(c) && count_n < 2) ++count_n;
    
if (count > 2 && isupper(c) && count_n == 2){
    
    fout << c << '.';// ----------- Писать инциалы
//------------------    
    do{
        c = fin.get();// -------------- Сьесть слово
      } while (c != ' ' && c != '.');
    if (c == '.'){ count = 0; count_n = 0; }// Обнуление (точка конец предл.)
    }
fout << c ;// --------- Писать не инциалы
    }
fin.close();// Всё закрыть
fout.close();
        return 0;
}
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 02:44
https://www.cyberforum.ru/atta... 1659051859
Миниатюры
Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»  
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 04:03
Это одна строчка (ANSI)

Добавлено через 1 час 17 минут
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
#include <fstream>
 
int main()
{
std::ifstream fin; fin.open("input.txt");
std::ofstream fout; fout.open("output.txt");
    if (fin.is_open()){
        char c; int count(0);  int count_n(0);
        while (!fin.eof())
        {
            c = fin.get(); ++count;
    if (c == '.'){ count = 0; count_n = 0; }// Обнуление (точка конец предл.)
            if (count > 2 && isupper(c) && ++count_n >= 2)
            {
                fout << c << '.';// ----------- Писать инциалы
                //------------------    
              do{
                    c = fin.get();// -------------- Сьесть слово
                } while (c != ' ' && c != '.' && !fin.eof());
    if (c == '.'){ count = 0; count_n = 0; }// Обнуление (точка конец предл.)
            }
            fout << c;// --------- Писать не инциалы
        }
fin.close();// Всё закрыть
fout.close();
        }
        return 0;
}
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10
29.07.2022, 19:22  [ТС]
Выводит лишнюю тояку

Добавлено через 40 минут
Точку* и букву я
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
29.07.2022, 20:15
Цитата Сообщение от PELMENKA9183882 Посмотреть сообщение
Прога выводит служебный символ что ломает чекер
что ето такое?

вот вам файл input.txt
Code
1
2
Please convey my warm regards to
Ivanov Ivan Ivanovich.
вот вам файл output.txt
Code
1
2
Please convey my warm regards to
Ivanov I.I.
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 22:16
Цитата Сообщение от PELMENKA9183882 Посмотреть сообщение
из одного или нескольких предложений на английском языке
programmer_08,
У вас обработано одно предложение.
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 22:29
https://www.cyberforum.ru/atta... 1659122929
Миниатюры
Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»  
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 22:59
А почему там ff?


Добавлено через 27 минут
Преодолел...

C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    std::ifstream fin; fin.open("input.txt");
    std::ofstream fout; fout.open("output.txt");
    if (fin.is_open()){
        char c; int count(0);  int count_n(0);
        while (true)
        {
        c = fin.get(); ++count;
                    if (fin.eof())break;
Добавлено через 2 минуты
А точка последняя стоит. Ставить её или нет, вопрос спорный.
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 23:01
https://www.cyberforum.ru/atta... 1659124886
Миниатюры
Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»  
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
29.07.2022, 23:03
Не ставить точек в инциалах?
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
29.07.2022, 23:52
Цитата Сообщение от Наталья8 Посмотреть сообщение
У вас обработано одно предложение.
output.txt
Code
1
2
3
4
Please convey my warm regards to
Ivanov I.I.Please c.m.warm regards to
Ivanov I.I.Please c.m.warm regards to Ivanov I.I.Please c.m.warm regards to
Ivanov I.I.
input.txt
Code
1
2
3
4
Please convey my warm regards to
Ivanov Ivan Ivanovich. Please convey my warm regards to
Ivanov Ivan Ivanovich. Please convey my warm regards to Ivanov Ivan Ivanovich. Please convey my warm regards to
Ivanov Ivan Ivanovich.
а мдя... неправильно работает, а я и не заметил)

Добавлено через 8 минут
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <fstream>
 
int main()
{
    std::ifstream fin; fin.open("input.txt");
    std::ofstream fout; fout.open("output.txt");
    
    char c;
    while(!fin.eof())
    {
    while(!fin.eof())
        {
            c = fin.get();
            if(c != '\n' && c != '\t' && c != ' ')
                break;
        }
    if(!fin.eof())
        fout << c;
    while((c = fin.get()) != EOF)
    {
        if(c == '.')
            break;
        if(isupper(c))
            {
                fout << c;
                while((c = fin.get()) != EOF)
                        {
                            fout << c;
                            if(c == '\n' || c == '\t' || c == ' ')
                                break;
                        }
                c = fin.get();
                fout << c << '.';
                while((c = fin.get()) != EOF)
                        if(c == '\n' || c == '\t' || c == ' ')
                            break;
                c = fin.get();
                fout << c << '.';
                while((c = fin.get()) != EOF)
                        if(c == '\n' || c == '\t' || c == ' ' || c == '.')
                            break;
            }
        else fout << c;
        if(c == '.')
            break;
    }
}
    fin.close();
    fout.close();
    return 0;
}
input.txt
Code
1
2
3
4
Please convey my warm regards to
Ivanov Ivan Ivanovich. Please convey Ivanov Ivan Ivanovich my warm regards to
Ivanov Ivan Ivanovich. Please convey my warm regards to Ivanov Ivan Ivanovich. Please convey my warm regards to
Ivanov Ivan Ivanovich.
output.txt
Code
1
2
3
4
Please convey my warm regards to
Ivanov I.I.Please convey Ivanov I.I.my warm regards to
Ivanov I.I.Please convey my warm regards to Ivanov I.I.Please convey my warm regards to
Ivanov I.I.
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 10
30.07.2022, 22:31  [ТС]
Программа ломает чеккер с чем может быть связано-хз
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
30.07.2022, 22:36
Что такое чеккер?

Добавлено через 1 минуту
у меня ни чё не ломает.

Добавлено через 1 минуту
Замените все включения «Фамилия Имя Отчество» на «Фамилия Инициалы»
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2022, 22:36
Помогаю со студенческими работами здесь

Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество
Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество

Запись "Фамилия Имя Отчество" перевести в "Фамилия И.О." (PascalABC -> C++)
Пожалуйста перевидите код с паскаля на с++!! uses crt; var s,s1:string; begin writeln('Введите Фамилию Имя Отчество'); read(s); ...

У меня выводит имя и фамилия, а отчество не хочет
Введите с клавиатуры терминала массив строк. Каждая строка имеет вид: &quot;Фамилия Имя Отчество&quot; (разделяются одним пробелом). Признак...

При сокращении "Фамилия Имя Отчество" к "Фамилия И.О." пропадают "И.О."
Подскажите, в чём может быть ошибка? Процедура сама по себе работает правильно, а в таком виде нет. ...

Разработка класса: Abiturient: Фамилия, Имя, Отчество, Адрес, Оценки
разработать класс включая в метод Set и Get определить другие методы. Написать программу демонстрирующую работу с этим классом. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru