Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером - C (СИ)

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

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

Помогите написать функцию. Мой код не работает.
Листинг программы
  1. #define CRT_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. int func (char*, char*, int, int);
  7. int main () {
  8. char *A;
  9. char *B;
  10. int k, a, b, r;
  11. printf ("Enter max length:>");
  12. scanf("%d", &k);
  13. A = (char*) malloc (sizeof(char) * k);
  14. B = (char*) malloc (sizeof(char) * k);
  15. printf ("Enter the string:>");
  16. flushall();
  17. gets(A);
  18. printf ("\nEnter № of the 1-st word>>");
  19. scanf("%d", &a);
  20. printf ("\nEnter number of words:>");
  21. scanf ("%d", &b);
  22. r = func (A, B, a, b);
  23. printf ("\nYour string is:%s>", B);
  24. // puts(B);
  25. printf ("\nr = %d", r);
  26. _getch();
  27. return 0;
  28. }
  29. int func (char * str, char * str2, int k, int n) {
  30. int p=0;
  31. while (p!=k) {*str++;
  32. if (*str==' ') ++p; }
  33. p=0;
  34. while (p!=n) {str2++; str++;
  35. *str2=*str;
  36. if (*str++==' ') ++p; }
  37. *str2++ = '\0';
  38. return 0;
  39. }
По идее функция должна возвращать указатель на строку - результат. Я сделал int для возврата значения успешно или не успешно завершилась функция (неуспешные returnы еще не доделал)

Решение задачи: «Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. void func (char[], char[], int, int);
  6. int main () {
  7.     char *A;
  8.     char *B;
  9.     int k, a, b;
  10. printf ("Enter max length:>");
  11. scanf("%d", &k);
  12. A = (char*) malloc (sizeof(char) * k);
  13. B = (char*) malloc (sizeof(char) * k);
  14. printf ("Enter the string:>");
  15. _flushall();
  16. gets(A);
  17. printf ("\nEnter number of the 1-st  word>>");
  18. scanf("%d", &a);
  19. printf ("\nEnter number of words:>");
  20. scanf ("%d", &b);
  21. func (A, B, a, b);
  22. printf ("\nYour string is:%s>", B);
  23. puts(B);
  24. _getch();
  25. return 0;
  26. }
  27.  
  28. void func (char * str, char * str2, int k, int n) {
  29.     int p=0, i=0, j=0;
  30. while (p!=k) {
  31.    
  32.     if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0'))  ++p; i++; }
  33. p=0;
  34. while (p!=n) {
  35.     *(str2+j)=*(str+i);
  36.     if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0')) ++p; i++; j++; }
  37. str2[j] = '\0';
  38. }

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

  1. Ввод данных:
    • Пользователь вводит максимальную длину строки (k) с помощью функции scanf.
    • Затем пользователь вводит строку (A) с помощью функции gets.
    • Пользователь вводит номер первого слова (a) с помощью функции scanf.
    • Затем пользователь вводит количество слов (b) с помощью функции scanf.
  2. Выделение слов:
    • Функция func выделяется слова из строки (A) в строку (B).
    • Она начинает с позиции a и выделяет b слов или пока не достигнет конца строки.
    • Она использует два указателя, i и j, чтобы перемещаться по строке A и копировать слова в строку B.
    • Указатель i перемещается вперед, пока не достигнет следующего слова, проверяя наличие пробелов.
    • Указатель j перемещается вперед, копируя слова в строку B.
    • Если слово заканчивается пробелом или символом новой строки, функция func копирует следующее слово в строку B.
    • В конце функция func добавляет нулевой символ в конец строки B, чтобы обозначить конец строки.
  3. Вывод результата:
    • В основной функции main строка B выводится на экран с помощью функций printf и puts.
    • Строка B представляет собой выделенные слова из строки A.

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


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

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

13   голосов , оценка 3.846 из 5

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

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

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