Вывести последовательность слов, начиная с указанного - C (СИ)

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

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

I need help,guys Нужно написать программу, которая выделяет из строки заданное количество слов, начиная со слова с заданным номером. Строка, количество слов, номер первого слова передаются в функцию в качестве параметров. При реализации функции запрещается пользоваться функциями стандартной библиотеки языка C. Под термином «слово» понимается любая последовательность символов, ограниченная любым количеством пробелов и/или символом начала/конца строки. С меня большущее спасибо.

Решение задачи: «Вывести последовательность слов, начиная с указанного»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
  3.  
  4. //индексация слов начинается с единицы
  5. const char* substr_words(const char* s, const char** e, int index, int cnt){
  6.     const char* p = NULL;
  7.     int  i = 1, n = 0, last = index + cnt;
  8.  
  9.     if(last <= 0)
  10.         return NULL;
  11.  
  12.     *e = NULL;
  13.     do {
  14.         if(!is_space(*s) && *s)
  15.             ++n;
  16.         else if(n > 0){
  17.             if(i == index)
  18.                 p  = s - n;
  19.             else if(i == last){
  20.                 *e = s - n;
  21.                 break;
  22.             }
  23.             ++i;
  24.             n = 0;
  25.         }
  26.     } while(*s++ != '\0');
  27.  
  28.     if(*e == NULL)
  29.         *e = s - 1;
  30.     return p;
  31. }
  32.  
  33. int main(void){
  34.     const char* a, *b;
  35.     char s[] = "ADD SUB MUL DIV IDIV IMUL XCHG";
  36.  
  37.     a = substr_words(s, &b, 3, 4);
  38.     if(a != NULL){
  39.         //вывод
  40.         printf("%.*s\n", (int)(b - a), a);
  41.  
  42.         //можно вывести так
  43.         while(a != b)
  44.             putchar(*a++);
  45.     }
  46.     getchar();
  47.     return 0;
  48. }

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

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Определяем макрос is_space(c), который проверяет является ли символ пробелом, табуляцией или переносом строки
  3. Функция substr_words() принимает на вход указатель на строку, указатель на первый найденный подстроку, индекс начала подстроки и количество символов подстроки
  4. Внутри функции объявляем переменные: p для хранения предыдущего символа подстроки, i для индекса текущего символа, n для количества символов текущей подстроки и last для индекса последнего символа подстроки
  5. Проверяем, что последний символ подстроки больше или равен нулю, иначе возвращаем NULL
  6. Устанавливаем начальное значение *e в NULL
  7. В цикле do-while проходим по всем символам строки до конца строки
  8. Если текущий символ не пробел и не нулевой, увеличиваем значение n на единицу
  9. Если текущий символ пробел и n больше нуля, то это означает, что мы нашли подстроку, начинающуюся с n символов назад от текущего символа
  10. Если i равно индексу начала подстроки, то обновляем значение p на текущий символ минус n символов
  11. Если i равно последнему символу подстроки, то обновляем значение *e на текущий символ минус n символов и выходим из цикла с помощью оператора break
  12. Увеличиваем значение i на единицу, обнуляем n и продолжаем цикл
  13. Если *e равно NULL, то обновляем его значение на последний символ минус один
  14. Возвращаем значение p
  15. В функции main() создаем указатель на строку ADD SUB MUL DIV IDIV IMUL XCHG и вызываем функцию substr_words()
  16. Передаем на вход функции substr_words() указатель на строку, указатель на первый найденный подстроку, индекс начала подстроки равный 3 и количество символов подстроки равное 4
  17. Выводим найденную подстроку на экран с помощью функции printf()
  18. Можно вывести найденную подстроку с помощью цикла while, чтобы вывести каждый символ подстроки
  19. Получаем значение от пользователя с помощью функции getchar()
  20. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

15   голосов , оценка 4.267 из 5

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

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

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