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

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

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

Помогите написать функцию. Мой код не работает.
#define CRT_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int func (char*, char*, int, int);
int main () {
    char *A;
    char *B;
    int k, a, b, r;
printf ("Enter max length:>");
scanf("%d", &k);
A = (char*) malloc (sizeof(char) * k);
B = (char*) malloc (sizeof(char) * k);
printf ("Enter the string:>");
flushall();
gets(A);
printf ("\nEnter № of the 1-st  word>>");
scanf("%d", &a);
printf ("\nEnter number of words:>");
scanf ("%d", &b);
r = func (A, B, a, b);
printf ("\nYour string is:%s>", B);
 
//  puts(B);
printf ("\nr = %d", r);
_getch();
return 0;
}
 
int func (char * str, char * str2, int k, int n) {
    int p=0;
while (p!=k) {*str++;
    if (*str==' ')  ++p; }
p=0;
while (p!=n) {str2++; str++;
    *str2=*str;
    if (*str++==' ') ++p; }
*str2++ = '\0';
return 0;
}
По идее функция должна возвращать указатель на строку - результат. Я сделал int для возврата значения успешно или не успешно завершилась функция (неуспешные returnы еще не доделал)

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

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
void func (char[], char[], int, int);
int main () {
    char *A;
    char *B;
    int k, a, b;
printf ("Enter max length:>");
scanf("%d", &k);
A = (char*) malloc (sizeof(char) * k);
B = (char*) malloc (sizeof(char) * k);
printf ("Enter the string:>");
_flushall();
gets(A);
printf ("\nEnter number of the 1-st  word>>");
scanf("%d", &a);
printf ("\nEnter number of words:>");
scanf ("%d", &b);
func (A, B, a, b);
printf ("\nYour string is:%s>", B);
puts(B);
_getch();
return 0;
}
 
void func (char * str, char * str2, int k, int n) {
    int p=0, i=0, j=0;
while (p!=k) {
    
    if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0'))  ++p; i++; }
p=0;
while (p!=n) {
    *(str2+j)=*(str+i);
    if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0')) ++p; i++; j++; }
str2[j] = '\0';
}

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

  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
Похожие ответы