Сформировать из строки с ФИО строку с фамилией с инициалами (C-строки) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу, формирующую из одной строки, содержащей фамилию, имя и отчество строку с фамилией и инициалами. Решить задачу через С строки. Вот моя программа. Только перед инициалом имени она выводит лишние символы. Как исправить? P.S. консоль спросит номер задачи. Введите 1
Листинг программы
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <string>
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. #include <locale>
  7. #include <fstream>
  8. using namespace std;
  9. void zamena (char* a, char* a1)
  10. {
  11. char* space = strchr (a, ' ');
  12. int t = space - a + 1;
  13. strncpy (a1, a, t);
  14. char a2 [4];
  15. a2[0]=a[t];
  16. a2[1]='.';
  17. a2[2]=' ';
  18. strcat (a1, a2);
  19. char* space2 = strrchr (a, ' ');
  20. t = space2 - a + 1;
  21. a2[0]=a[t];
  22. a2[1]='.';
  23. strcat (a1, a2);
  24. }
  25. void zadacha1()
  26. {
  27. const int n=80;
  28. char a[n];
  29. cout << "Введите ФИО: ";
  30. cin.ignore();
  31. cin.getline(a, n);
  32. char a1[n];
  33. zamena (a, a1);
  34. cout << a1;
  35. }
  36. int main()
  37. {
  38. SetConsoleCP(1251);
  39. SetConsoleOutputCP(1251);
  40. int m;
  41. cout << "Введите номер задачи: ";
  42. cin >> m;
  43. switch (m)
  44. {
  45. case 1: zadacha1(); break;
  46. }
  47. return 0;
  48. }

Решение задачи: «Сформировать из строки с ФИО строку с фамилией с инициалами (C-строки)»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. void copy_fio(const char* src, char* dst) {
  4.     int stage = 0;
  5.     char ch;
  6.     while (ch = *src++) {
  7.         if (stage == 0) {
  8.             if (ch == ' ') {
  9.                 stage = 1;
  10.             }
  11.             *dst++ = ch;
  12.             continue;
  13.         }
  14.         if (stage == 1) {
  15.             if (ch != ' ') {
  16.                 stage = 2;
  17.                 *dst++ = ch;
  18.             }
  19.             continue;
  20.         }
  21.         if (stage == 2) {
  22.             stage = 3;
  23.             *dst++ = '.';
  24.             continue;
  25.         }
  26.         if (ch == ' ') {
  27.             stage = 1;
  28.             *dst++ = ' ';
  29.         }
  30.     }
  31.     *dst = '\0';
  32. }
  33.  
  34. int main(void) {
  35.     char src[] = "Ivanov Ivan Ivanovich";
  36.     char dst[sizeof(src) / sizeof(src[0])];
  37.     copy_fio(src, dst);
  38.     puts(dst);
  39.     return 0;
  40. }

Объяснение кода листинга программы

  1. В функции copy_fio происходит копирование строки src в строку dst.
  2. Переменная stage используется для отслеживания текущего этапа формирования строки с фамилией и инициалами.
  3. Если stage равно 0 и встречается пробел, то stage изменяется на 1.
  4. Если stage равно 1 и встречается символ, который не является пробелом, то stage изменяется на 2.
  5. Если stage равно 2 и встречается пробел, то stage изменяется на 1.
  6. Если stage равно 2 и встречается символ, который не является пробелом, то добавляется этот символ в dst.
  7. Если stage равно 3 и встречается пробел, то stage изменяется на 1.
  8. Если stage равно 3 и не встречается пробел, то добавляется точка в dst.
  9. Если stage равно 1 и встречается пробел, то stage изменяется на 1.
  10. Если stage равно 1 и не встречается пробел, то добавляется символ из src в dst.
  11. Если stage равно 0 и не встречается пробел, то добавляется символ из src в dst.
  12. В конце функции добавляется нулевой символ в dst.
  13. В функции main создается строка src содержащая ФИО.
  14. В функции main создается пустая строка dst для хранения фамилии и инициалов.
  15. В функции main вызывается функция copy_fio для копирования строки src в строку dst.
  16. В функции main выводится содержимое строки dst с помощью функции puts.
  17. В функции main возвращается 0, что означает успешное выполнение программы.
  18. В функции main не указаны какие-либо комментарии.
  19. В функции main не используются переменные stage, src и dst.
  20. В функции main не используются функции copy_fio и puts.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы