Сформировать из строки с ФИО строку с фамилией с инициалами (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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д