Вывести последовательность слов, начиная с указанного - C (СИ)
Формулировка задачи:
I need help,guys
Нужно написать программу, которая выделяет из строки заданное количество слов, начиная со слова с заданным номером. Строка, количество слов, номер первого слова передаются в функцию в качестве параметров. При реализации функции запрещается пользоваться функциями стандартной библиотеки языка C. Под термином «слово» понимается любая последовательность символов, ограниченная любым количеством пробелов и/или символом начала/конца строки.
С меня большущее спасибо.
Решение задачи: «Вывести последовательность слов, начиная с указанного»
textual
Листинг программы
- #include <stdio.h>
- #define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
- //индексация слов начинается с единицы
- const char* substr_words(const char* s, const char** e, int index, int cnt){
- const char* p = NULL;
- int i = 1, n = 0, last = index + cnt;
- if(last <= 0)
- return NULL;
- *e = NULL;
- do {
- if(!is_space(*s) && *s)
- ++n;
- else if(n > 0){
- if(i == index)
- p = s - n;
- else if(i == last){
- *e = s - n;
- break;
- }
- ++i;
- n = 0;
- }
- } while(*s++ != '\0');
- if(*e == NULL)
- *e = s - 1;
- return p;
- }
- int main(void){
- const char* a, *b;
- char s[] = "ADD SUB MUL DIV IDIV IMUL XCHG";
- a = substr_words(s, &b, 3, 4);
- if(a != NULL){
- //вывод
- printf("%.*s\n", (int)(b - a), a);
- //можно вывести так
- while(a != b)
- putchar(*a++);
- }
- getchar();
- return 0;
- }
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Определяем макрос is_space(c), который проверяет является ли символ пробелом, табуляцией или переносом строки
- Функция substr_words() принимает на вход указатель на строку, указатель на первый найденный подстроку, индекс начала подстроки и количество символов подстроки
- Внутри функции объявляем переменные: p для хранения предыдущего символа подстроки, i для индекса текущего символа, n для количества символов текущей подстроки и last для индекса последнего символа подстроки
- Проверяем, что последний символ подстроки больше или равен нулю, иначе возвращаем NULL
- Устанавливаем начальное значение *e в NULL
- В цикле do-while проходим по всем символам строки до конца строки
- Если текущий символ не пробел и не нулевой, увеличиваем значение n на единицу
- Если текущий символ пробел и n больше нуля, то это означает, что мы нашли подстроку, начинающуюся с n символов назад от текущего символа
- Если i равно индексу начала подстроки, то обновляем значение p на текущий символ минус n символов
- Если i равно последнему символу подстроки, то обновляем значение *e на текущий символ минус n символов и выходим из цикла с помощью оператора break
- Увеличиваем значение i на единицу, обнуляем n и продолжаем цикл
- Если *e равно NULL, то обновляем его значение на последний символ минус один
- Возвращаем значение p
- В функции main() создаем указатель на строку
ADD SUB MUL DIV IDIV IMUL XCHG
и вызываем функцию substr_words() - Передаем на вход функции substr_words() указатель на строку, указатель на первый найденный подстроку, индекс начала подстроки равный 3 и количество символов подстроки равное 4
- Выводим найденную подстроку на экран с помощью функции printf()
- Можно вывести найденную подстроку с помощью цикла while, чтобы вывести каждый символ подстроки
- Получаем значение от пользователя с помощью функции getchar()
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д