Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером - C (СИ)
Формулировка задачи:
Помогите написать функцию.
Мой код не работает.
По идее функция должна возвращать указатель на строку - результат.
Я сделал int для возврата значения успешно или не успешно завершилась функция (неуспешные returnы еще не доделал)
#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;
}Решение задачи: «Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером»
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';
}
Объяснение кода листинга программы
- Ввод данных:
- Пользователь вводит максимальную длину строки (k) с помощью функции scanf.
- Затем пользователь вводит строку (A) с помощью функции gets.
- Пользователь вводит номер первого слова (a) с помощью функции scanf.
- Затем пользователь вводит количество слов (b) с помощью функции scanf.
- Выделение слов:
- Функция func выделяется слова из строки (A) в строку (B).
- Она начинает с позиции a и выделяет b слов или пока не достигнет конца строки.
- Она использует два указателя, i и j, чтобы перемещаться по строке A и копировать слова в строку B.
- Указатель i перемещается вперед, пока не достигнет следующего слова, проверяя наличие пробелов.
- Указатель j перемещается вперед, копируя слова в строку B.
- Если слово заканчивается пробелом или символом новой строки, функция func копирует следующее слово в строку B.
- В конце функция func добавляет нулевой символ в конец строки B, чтобы обозначить конец строки.
- Вывод результата:
- В основной функции main строка B выводится на экран с помощью функций printf и puts.
- Строка B представляет собой выделенные слова из строки A.