Сформировать из строки с ФИО строку с фамилией с инициалами (C-строки) - C (СИ)
Формулировка задачи:
Написать программу, формирующую из одной строки, содержащей фамилию, имя
и отчество строку с фамилией и инициалами.
Решить задачу через С строки.
Вот моя программа. Только перед инициалом имени она выводит лишние символы. Как исправить?
P.S. консоль спросит номер задачи. Введите 1
Листинг программы
- #include <iostream>
- #include <windows.h>
- #include <string>
- #include <stdio.h>
- #include <ctype.h>
- #include <locale>
- #include <fstream>
- using namespace std;
- void zamena (char* a, char* a1)
- {
- char* space = strchr (a, ' ');
- int t = space - a + 1;
- strncpy (a1, a, t);
- char a2 [4];
- a2[0]=a[t];
- a2[1]='.';
- a2[2]=' ';
- strcat (a1, a2);
- char* space2 = strrchr (a, ' ');
- t = space2 - a + 1;
- a2[0]=a[t];
- a2[1]='.';
- strcat (a1, a2);
- }
- void zadacha1()
- {
- const int n=80;
- char a[n];
- cout << "Введите ФИО: ";
- cin.ignore();
- cin.getline(a, n);
- char a1[n];
- zamena (a, a1);
- cout << a1;
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int m;
- cout << "Введите номер задачи: ";
- cin >> m;
- switch (m)
- {
- case 1: zadacha1(); break;
- }
- return 0;
- }
Решение задачи: «Сформировать из строки с ФИО строку с фамилией с инициалами (C-строки)»
textual
Листинг программы
- #include <stdio.h>
- void copy_fio(const char* src, char* dst) {
- int stage = 0;
- char ch;
- while (ch = *src++) {
- if (stage == 0) {
- if (ch == ' ') {
- stage = 1;
- }
- *dst++ = ch;
- continue;
- }
- if (stage == 1) {
- if (ch != ' ') {
- stage = 2;
- *dst++ = ch;
- }
- continue;
- }
- if (stage == 2) {
- stage = 3;
- *dst++ = '.';
- continue;
- }
- if (ch == ' ') {
- stage = 1;
- *dst++ = ' ';
- }
- }
- *dst = '\0';
- }
- int main(void) {
- char src[] = "Ivanov Ivan Ivanovich";
- char dst[sizeof(src) / sizeof(src[0])];
- copy_fio(src, dst);
- puts(dst);
- return 0;
- }
Объяснение кода листинга программы
- В функции
copy_fio
происходит копирование строкиsrc
в строкуdst
. - Переменная
stage
используется для отслеживания текущего этапа формирования строки с фамилией и инициалами. - Если
stage
равно 0 и встречается пробел, тоstage
изменяется на 1. - Если
stage
равно 1 и встречается символ, который не является пробелом, тоstage
изменяется на 2. - Если
stage
равно 2 и встречается пробел, тоstage
изменяется на 1. - Если
stage
равно 2 и встречается символ, который не является пробелом, то добавляется этот символ вdst
. - Если
stage
равно 3 и встречается пробел, тоstage
изменяется на 1. - Если
stage
равно 3 и не встречается пробел, то добавляется точка вdst
. - Если
stage
равно 1 и встречается пробел, тоstage
изменяется на 1. - Если
stage
равно 1 и не встречается пробел, то добавляется символ изsrc
вdst
. - Если
stage
равно 0 и не встречается пробел, то добавляется символ изsrc
вdst
. - В конце функции добавляется нулевой символ в
dst
. - В функции
main
создается строкаsrc
содержащая ФИО. - В функции
main
создается пустая строкаdst
для хранения фамилии и инициалов. - В функции
main
вызывается функцияcopy_fio
для копирования строкиsrc
в строкуdst
. - В функции
main
выводится содержимое строкиdst
с помощью функцииputs
. - В функции
main
возвращается 0, что означает успешное выполнение программы. - В функции
main
не указаны какие-либо комментарии. - В функции
main
не используются переменныеstage
,src
иdst
. - В функции
main
не используются функцииcopy_fio
иputs
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д